我有一個用本地C++編寫的DLL。 Visual Studio項目名稱爲MyDll
,它編譯爲輸出目錄中名爲MyDll.dll
的文件。重命名DLL會導致使用它的代碼崩潰
編譯後,我將它重命名爲MyDll2.dll
。 (這個例子看起來很愚蠢,但我有一個很好的重命名的理由。)
用C++/CLI編寫的第二個項目使用這個DLL。
在編譯時,此項目引用MyDll.lib
(在編譯MyDll時生成),以便能夠使用dll中定義的類。
在運行時,要加載DLL,我調用LoadLibrary,並將文件C:\...\MyDll2.dll
(它實際上在同一個文件夾中)的完整路徑傳遞給它。它成功加載,如LoadLibrary的返回值所示。
在我使用DLL中定義的類的代碼中第一次出現(只是在棧中聲明一個對象)時,它崩潰了SEHException
(這些例外沒有提供有關崩潰原因的任何信息...... )
這隻會發生,如果我做了重命名的一步。如果我將它保留爲MyDll.dll
並在該文件上調用LoadLibrary,則一切正常。所以這顯然是由於重命名。
任何想法爲什麼?我不允許重命名DLL嗎?
(編輯:通過提供更多的細節澄清)
您的應用程序是否具有該DLL的句柄(使用Procexp來說明)? – Benoit 2010-12-09 11:00:59