目的:(1)使用exe自己资源文件来创建支撑的dll文件或者配置文件,这样可以在开发绿色软件的时候只需要拷贝一个exe可执行文件就可以独立运行。
(2)防止误删配套文件导致exe应用无法执行。
(3)生成预置配置文件方便使用。
思路:把库文件导入到资源文件,在程序运行时检查是否存在,否则生成,做到一个exe文件就可以独立运行。
第一步:建立一个MFC Dialog based 静态链接库(静态库不依赖其他库)MFC应用
第二步:导入资源文件
第三步:编写代码,在构造函数加入代码
CRc2fileApp::CRc2fileApp()
{// TODO: add construction code here,// Place all significant initialization in InitInstanceHINSTANCE hInst = (HINSTANCE)GetModuleHandle(0);HRSRC hResource = FindResource(hInst, MAKEINTRESOURCE(IDR_DLL1), _T("DLL"));if (hResource == NULL) {MessageBox(NULL, _T("Cannot find resource"), _T("Error"), MB_OK | MB_ICONERROR);return;}DWORD dwSize = SizeofResource(hInst, hResource);HGLOBAL hGlobal = LoadResource(hInst, hResource);if (hGlobal == NULL) {MessageBox(NULL, _T("Cannot load resource"), _T("Error"), MB_OK | MB_ICONERROR);return;}LPSTR lpDllBin = (LPSTR)LockResource(hGlobal);if (lpDllBin == NULL) {MessageBox(NULL, _T("Cannot lock resource"), _T("Error"), MB_OK | MB_ICONERROR);return;}// 可以将数据写入文件FILE *fp = fopen("sqlite3.dll", "wb");if (fp == NULL) {MessageBox(NULL, _T("Cannot open file"), _T("Error"), MB_OK | MB_ICONERROR);return;}fwrite(lpDllBin, dwSize, 1, fp);fclose(fp);FreeResource(hGlobal);return;}
结果:
完整代码上传到资源,欢迎下载。