擴充套件DLL中的資源使用

2021-04-01 11:49:31 字數 1899 閱讀 3128

碰到了擴充套件

dll中的資源使用的問題,解決後,共享:

)簡單的說:每個

dll有自己特有的資源。在使用時,明確的告訴系統要使用哪個

dll的資源。

ok,現在的問題就是如何告訴系統使用哪個

dll的資源。函式:

afxsetresourcehandle

() 可以完成這個功能。引數是資源的控制代碼。

那怎麼得到某個

dll的資源控制代碼

呢?如下:

在擴充套件dll

的入口函式

extern

"c" int apientry dllmain(hinstance hinstance, dword dwreason, lpvoid lpreserved)

其中shpsymboldll

可能會因工程名不同而不同,這裡就以這個名稱代替來說明了

dll的資源控制代碼

就可以在此得到:

)shpsymboldll

定義:afx_extension_module shpsymboldll= ;:)

shpsymboldll.hresource

這個就是我們要的了。其它引數請看說明。

現在我們在使用某

dll的資源時只要先加入以下兩行就可以正確執行了:哈哈

hinstance hold = afxgetresourcehandle();

afxsetresourcehandle( shpsymboldll.hresource );

注意在用完之後再恢復

:afxsetresourcehandle( hold );

另外乙個不得不提起的東西

,在入口函式中有一行

newcdynlinklibrary(shpsymboldll);

旁邊有一說明如下:

將此dll 插入到資源鏈中

呵呵,的確如此。言下之意,上面所說的沒什麼用了?

!!!!

其實不然,假如

dll中有乙個

dialog。id

為120

在你呼叫此

dll的應用程式資源中,如果沒有

id的值為

120。那麼,呵呵,上面的都是白做了,你會得到預料中的結果

j。但如果應用程式中有一相同

id的對話方塊資源呢?請大家一試。結果就不一樣了。其中的原因與

newcdynlinklibrary(shpsymboldll)

相關聯。

具體請看mfc中 的** domodal() 就會得到解答。或看msdn中帶的例子 dllhusk

系統自動會查詢相應的資源,但不會判斷哪個是正確的。以找到的第乙個資源為準

另:為了編寫方便。看了其它人的一點東西,搬過來用。

可以寫乙個類,寫成全域性的。

class

cmoduleinfo

~cmoduleinfo(void){}

};class

afx_ext_class cmodulestatemana

;實現如下:

cmoduleinfos_mi;

cmodulestatemana::cmodulestatemana()

cmodulestatemana::~cmodulestatemana()

然後在入口函式之前加入

extern

cmoduleinfo s_mi;

函式中加入:

s_mi.m_hmodule= shpsymboldll.hmodule;

s_mi.m_hresource= shpsymboldll.hresource;

ok,完事。

在呼叫的時候只要先加入:

cmodulestatemana m**;

就可以正確呼叫了j//

anigold@163.***

DLL中使用資源

1 在dll中使用對話方塊資源 hinstance hold afxgetresourcehandle afxsetresourcehandle getmodulehandle dll 開啟對話方塊 afxsetresourcehandle hold 2 在dll中使用activex控制項 hres...

資源dll的製作與使用

我使用的ide是vs2005。1.製作資源dll 建立乙個win32 dll的空工程,然後右擊專案 新增 資源 根據自己的需要新增資源。這裡我新增乙個png。由於可選項裡面沒有png,所以選擇 自定義 寫入png,確定。之後選擇 png 匯入需要的資源。這時,會生成2個檔案,resource.h和 ...

關於Mfc擴充套件dll的使用

1 例如,mfc擴充套件dll為exporta工程,mfc擴充套件dll為exportb工程,則exportb工程在使用exporta時,出現鏈結錯誤,開始以為沒有新增依賴庫或者到處類錯誤,但是檢視多次還是出現問題,後來上網查資料,發現afx ext data如下 exportb的dll工程使用ex...