there: 我寫了兩個dll項目,一個名字是Core.dll,另一個是Network.dll。 而在主(不是核心和非網絡)項目中,我使用類指針NetworkInterface *。 NetworkInterface是純虛擬類。運行主項目後,我發現Core.dll已加載,但Network.dll未加載(輸出窗口顯示)。主要項目依賴於核心和網絡。爲什麼我的DLL沒有加載?
我沒有使用函數LoadLibrary()。
謝謝。
最好的問候。
陳
there: 我寫了兩個dll項目,一個名字是Core.dll,另一個是Network.dll。 而在主(不是核心和非網絡)項目中,我使用類指針NetworkInterface *。 NetworkInterface是純虛擬類。運行主項目後,我發現Core.dll已加載,但Network.dll未加載(輸出窗口顯示)。主要項目依賴於核心和網絡。爲什麼我的DLL沒有加載?
我沒有使用函數LoadLibrary()。
謝謝。
最好的問候。
陳
如果NetworkInterface的是一個純虛類,那麼顧名思義它未指定任何目標代碼鏈接。如果你的主程序沒有在network.dll中使用任何代碼,那麼它就不會費心去鏈接它,並且不會在運行時加載它。
ZDan說了些什麼。
您需要從DLL中導出一個「工廠函數」,它將返回一個NetworkInterface的實例。
__declspec(dllexport) NetworkInterface* CreateNetworkInterface()
{
MyClassDerivedFromNetworkInterface *pNI = new MyClassDerivedFromNetworkInterface();
return pNI;
}
然後在「主」的地方,只是說:
NetworkInterface *pNI = CreateNetworkInterface();
所有這一切都假定您鏈接到您在編譯DLL,它被建造的network.lib存根庫。
我們需要更多信息。這是Win32上的C++項目嗎?你如何建立你的項目之間的依賴關係?如果不是在Core或Network中定義了'Main',那麼它在哪裏定義? – Dai
當然,有更合適的標籤不僅僅是「dll」;也許還有一些相關的代碼或鏈接細節? – Paul
你確定你從Network.dll調用了一些函數嗎?也許你頭裏有一些內聯函數? –