碰到了擴充套件
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...