Re: [問題] VS2005 DLL linking問題

看板C_and_CPP (C/C++)作者 (雷丘)時間16年前 (2009/12/08 13:01), 編輯推噓2(203)
留言5則, 2人參與, 最新討論串2/2 (看更多)
: 開發環境:VS2005 : 小的手邊有一個現成的 DLL : 因為特殊因素 現成的這個DLL只能用 dynamic DLL linking方式來鏈結 : 為了要在自己的程式做static DLL linking : 與是想要再寫一個 DLL 以 dynamic DLL linking的方式鏈結到這個現成的 DLL : 並能提供自己程式 static DLL linking 的方式鏈結 : 請問這種情況有辦法做到嗎? : 因為 dynamic DLL linking 需要用到 LoadLibrary() : 但在沒有main的DLL 這種方式可能實現嗎? : 謝謝 : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 118.166.132.134 : 推 VictorTom:在Windows下, DLL雖然沒有main, 但是有DllMain, 通常DLL 12/08 09:50 : → VictorTom:被load起來以後第一個要中的是DLLMain裡的attachProcess 12/08 09:50 : → VictorTom:所以DLL裡找合適的地方call LoadLibrary其他DLL是OK的:) 12/08 09:51 所以就是放在attachProcess之後就可以囉? 像是下面這樣 static HMODULE hmod = NULL; wstring dllPath=L"xxxx.dll"; #ifdef _MANAGED #pragma managed(push, off) #endif BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: hmod = LoadLibrary(dllPath.c_str()); break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } #ifdef _MANAGED #pragma managed(pop) #endif 謝謝^^ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.63.100.2

12/08 13:32, , 1F
理論上可行, 也建議detachProcess時該UnLoad的要UnLoad,
12/08 13:32, 1F

12/08 13:33, , 2F
如果DLL管理要做的事只有這樣那是無所謂, 如果比較複雜
12/08 13:33, 2F

12/08 13:33, , 3F
也可以考慮分程獨立的function, 在讓switch去call它們:)
12/08 13:33, 3F

12/12 04:02, , 4F
對了 一直忘了說謝謝 感激維特湯姆先生m(_ _)m
12/12 04:02, 4F

12/12 10:08, , 5F
:)
12/12 10:08, 5F
文章代碼(AID): #1B7TsYGa (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1B7TsYGa (C_and_CPP)