如何把DLL文件加到主程序的资源中,运行主程序的时候,释放资源 ? 如题?如何操作?(如何加入资源,如何释放)?谁能给讲讲,有个例子最好。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 真的没有这样干过吗?在vc中选择"file view"选项卡,然后add file to folders...就可以加入.dll文件啊,可关键是这样怎么在需要的时候释放dll?真的没有会吗? LoadLibrary(), FreeLibrary(), MSDN有. checkyvc6(checkyvc6) ,别误会,我可不会写木马,我只是想知道除了隐式调用、显试调用以外.....那些常规写dll和调用dll的方法外,加入工程的方法。 很简单的1。把DLL当作资源添加到工程中2。运行时从资源中释放出来,可以用CreateFile,WriteFile,3。LoadLibrary,FreeLibrary 谢谢theone的提示:CreateFile比较容易,可是对于WriteFile应该怎么写呢?BOOL WriteFile( HANDLE hFile, LPCVOID lpBuffer, //这个参数怎么写,如何从资源中得到dll的数据呢? DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped ); 是将作为资源的dll文件释放出来是不是?按下面步骤做1.GetModuleHandle -> FindResource -> LoadResource->LockResource获取资源文件地址2.SizeofResource 获取资源文件大小3.writefile的参数有了然后就读文件写文件罗!具体参数查msdn,没什么技术深度的,函数堆砌而已! jruv(江城飞鸿)大侠,非常感谢你,我基本上可以明白你的意思了,也知道该如何做了,可还有一个小问题,就是将dll加入工程后(我不知道怎么加入,我的作法是将mymaths.dll文件加入工程,然后,dll是不是还得作为资源再加入一遍?选择vc中的resource view 选项卡,右键/import,然后加入mymaths.dll,随后系统提示让写入资源类型,因为dll既不是icon也不是bmp,也不是menu等这些常规资源。所以我起名data资源,这样mymaths就加入了,我打开resource.h一看,里面多了一个资源名叫IDR_DLL1,请问是这样加入dll资源吗),下面我使用GetModulHandle函数,可是却出错。if(GetModuleHandle("mymaths.dll")==NULL) AfxmessageBox("error");为什么这样写总是提示error? Import时随便填个类型名,如“DATA”LPVOID IoBuffer = (LPVOID)::LoadResource(NULL, FindResource(NULL,MAKEINTRESOURCE(IDR_DLL1/*你Resource 的ID*/),(LPCTSTR)"DATA"));DWORD dwResource = SizeofResource(NULL,FindResource(NULL,MAKEINTRESOURCE(IDR_DLL1/*你Resource 的ID*/),(LPCTSTR)"DATA"));WriteFile(m_file,IoBuffer,dwResource,&BytesRead,NULL); theone()大侠,我按你的与法写了,可还是有问题,我把我的代码写下来,请你邦我看一下吧。void CTestDlg::OnButton5() {HANDLE f;if( (f=CreateFile( "D:\\maths.dll", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE ) MessageBox("CREATE IT", "got it", MB_OK );///程序在这里可以成功创建else MessageBox("NOT create it", "not got it", MB_OK );LPVOID IoBuffer = (LPVOID)::LoadResource(NULL, FindResource(NULL,MAKEINTRESOURCE(IDR_DATA1/*你Resource 的ID*/),(LPCTSTR)"DATA"));if(IoBuffer==NULL)AfxMessageBox("LoadResource error");//我的程序确实执行到这里,我看了一下错误代码,提示为"指定的映象文件不包含资源区域",因为这里有错,所以下面代码都不会正确执行。DWORD dwResource = SizeofResource(NULL,FindResource(NULL,MAKEINTRESOURCE(IDR_DATA1/*你Resource 的ID*/),(LPCTSTR)"DATA"));DWORD BytesRead;WriteFile(f,IoBuffer,dwResource,&BytesRead,NULL);} 确信你的resource ID以及resouce type都正确,确信你现在使用的resource资源就是你DLL所在的资源。 孙鑫VC++教程第十章,改变控件文本颜色的问题 vc保存图片 关于自定义开发控件的问题 GetOpenFileName在我机器上可以显示出来 在其他机器上没反映 都是XP 类内静态变量的问题 如何让任务栏上的图标"说话" 在线求救 ! 分配内存异常,出现 Unhandled exception ... 错误. 求一个自动关机的算法 异构数据库的问题 和女友分手,心情极度糟糕,散分! 关于TCP与数据延迟以及网络游戏的百思不得其解一问! socket报bind错误,搞不明白咋回事。。。求解答。。。
1。把DLL当作资源添加到工程中
2。运行时从资源中释放出来,可以用CreateFile,WriteFile,
3。LoadLibrary,FreeLibrary
BOOL WriteFile(
HANDLE hFile,
LPCVOID lpBuffer, //这个参数怎么写,如何从资源中得到dll的数据呢?
DWORD nNumberOfBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped );
按下面步骤做
1.GetModuleHandle -> FindResource -> LoadResource->LockResource获取资源文件地址
2.SizeofResource 获取资源文件大小
3.writefile的参数有了然后就读文件写文件罗!
具体参数查msdn,没什么技术深度的,函数堆砌而已!
if(GetModuleHandle("mymaths.dll")==NULL)
AfxmessageBox("error");
为什么这样写总是提示error?
LPVOID IoBuffer = (LPVOID)::LoadResource(NULL,
FindResource(NULL,MAKEINTRESOURCE(IDR_DLL1/*你Resource 的ID*/),(LPCTSTR)"DATA"));
DWORD dwResource = SizeofResource(NULL,
FindResource(NULL,MAKEINTRESOURCE(IDR_DLL1/*你Resource 的ID*/),(LPCTSTR)"DATA"));
WriteFile(m_file,IoBuffer,dwResource,&BytesRead,NULL);
{HANDLE f;
if( (f=CreateFile( "D:\\maths.dll",
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE )
MessageBox("CREATE IT", "got it", MB_OK );///程序在这里可以成功创建
else
MessageBox("NOT create it", "not got it", MB_OK );LPVOID IoBuffer = (LPVOID)::LoadResource(NULL,
FindResource(NULL,MAKEINTRESOURCE(IDR_DATA1/*你Resource 的ID*/),(LPCTSTR)"DATA"));if(IoBuffer==NULL)
AfxMessageBox("LoadResource error");//我的程序确实执行到这里,我看了一下错误代码,提示为"指定的映象文件不包含资源区域",因为这里有错,所以下面代码都不会正确执行。DWORD dwResource = SizeofResource(NULL,
FindResource(NULL,MAKEINTRESOURCE(IDR_DATA1/*你Resource 的ID*/),(LPCTSTR)"DATA"));
DWORD BytesRead;
WriteFile(f,IoBuffer,dwResource,&BytesRead,NULL);}