網上找了幾個例子,說的都不夠清晰,乾脆自己動手寫一個,整理出來留給後來人借閱
首先文件->新建->項目,選中mfc->mfc dll,名字zydll,直接點擊完成,創建一個(在共享DLL中使用mfc)的dll
起初我選擇在靜態庫中使用,頻繁提示錯誤,乾脆修改成共享dll,問題解決。我們繼續
切換到資源標籤,添加資源->string table 點擊新建,修改標題爲test,修改值爲2000
接着右鍵->添加資源->導入->圖片資源
這裏重頭戲即將開始
工程上右鍵->屬性->連接器->無入口點選擇(是/NOENTRY)
修改隨機基址爲:禁止映像隨機化(/DYNAMICBASE:NO)
修改數據執行保護(DEP)爲默認值
點擊確定,現在就可以編譯dll了
1>------ 已啓動全部重新生成: 項目: zydll, 配置: Debug Win32 ------
1>正在刪除項目“zydll”(配置“Debug|Win32”)的中間文件和輸出文件
1>正在編譯...
1>stdafx.cpp
1>正在編譯...
1>zydll.cpp
1>正在編譯資源...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>正在編譯資源清單...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>正在鏈接...
1> 正在創建庫 C:\VC\VS9\zydll\Debug\zydll.lib 和對象 C:\VC\VS9\zydll\Debug\zydll.exp
1>atlsd.lib(Externs.obj) : warning LNK4210: 存在 .CRT 節;可能有未處理的靜態初始值設定項或結束符
1>mfcs90ud.lib(dllmodul.obj) : warning LNK4210: 存在 .CRT 節;可能有未處理的靜態初始值設定項或結束符
1>atlsd.lib(atltrace.obj) : warning LNK4210: 存在 .CRT 節;可能有未處理的靜態初始值設定項或結束符
1>zydll.obj : warning LNK4210: 存在 .CRT 節;可能有未處理的靜態初始值設定項或結束符
1>stdafx.obj : warning LNK4210: 存在 .CRT 節;可能有未處理的靜態初始值設定項或結束符
1>mfcs90ud.lib(nolib.obj) : warning LNK4210: 存在 .CRT 節;可能有未處理的靜態初始值設定項或結束符
1>mfcs90ud.lib(dllmodul.obj) : warning LNK4210: 存在 .CRT 節;可能有未處理的靜態初始值設定項或結束符
1>mfcs90ud.lib(stdafx.obj) : warning LNK4210: 存在 .CRT 節;可能有未處理的靜態初始值設定項或結束符
1>正在嵌入清單...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>生成日誌保存在“file://c:\VC\VS9\zydll\Debug\BuildLog.htm”
1>zydll - 0 個錯誤,8 個警告
========== 全部重新生成: 成功 1 個,失敗 0 個,跳過 0 個 ==========
會出現一坨警告,不用理會它們
調用資源dll方法
新建一個disable工程,工程名爲testdll
在對話框上添加一個Picture Control控件,修改ID號爲IDC_TESTZYDLL
並修改type爲Bitmap
在Oninitdialog函數中編寫代碼
HMODULE hModule = LoadLibrary("zydll.dll");
if (hModule == NULL)
{
MessageBox("加載資源文件失敗!");
return true;
}
char buffer[255];
memset(buffer,0,sizeof(buffer));
LoadString(hModule,2000,buffer,sizeof(buffer));
HBITMAP hBitmap = LoadBitmap(hModule,MAKEINTRESOURCE(2001));
if (hBitmap == NULL)
{
MessageBox("加載圖片資源失敗!");
return true;
}
((CStatic*)GetDlgItem(IDC_TESTZYDLL))->SetBitmap(hBitmap);
FreeLibrary(hModule);
編譯執行,圖片就被加載成功鳥~~