vs 2008 mfc 編寫資源dll

網上找了幾個例子,說的都不夠清晰,乾脆自己動手寫一個,整理出來留給後來人借閱


首先文件->新建->項目,選中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);

編譯執行,圖片就被加載成功鳥~~

發佈了27 篇原創文章 · 獲贊 12 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章