[英]Entry Point Not Found
我在嘗試運行鏈接到我的 DLL 的應用程序時遇到一個奇怪的錯誤(我有一段時間沒有更改代碼,因為它工作正常)。 這個 DLL 曾經可以工作,但我一直在對 DLL 的代碼進行更改並使其編譯正常。 不幸的是,在嘗試運行應用程序時...
---------------------------
GameTest001.exe - Entry Point Not Found
---------------------------
The procedure entry point ??0Music@@QAE@ABV0@@Z could not be located in the dynamic link library Renderer02.dll.
---------------------------
OK
---------------------------
我不知道如何解釋這個錯誤。 我知道我做了什么改變,我的代碼看起來很好。 我試過谷歌搜索這個,但根本沒有運氣。
任何人都可以對此有所了解嗎? 這個錯誤是什么意思?
您正在鏈接到一個以錯誤名稱導出的函數,該名稱是??0Music@@QAE@ABV0@@Z
。 正在加載的 DLL 不會導出該名稱的函數,因此會出現錯誤。
名稱修飾對函數的名稱、參數和返回值進行編碼。 因此,導致不匹配的最可能原因是您在一處更改了函數的名稱、參數或返回值,而在另一處未更改。
如果您更改了 DLL,則需要重新編譯它以生成新的 .lib 和 .dll 文件。 您還將修改 .h 文件。 確保鏈接到 DLL 的程序使用所有這三個文件的修改版本。
此錯誤消息實際上對您很有幫助,因為它會確保接口的兩端匹配,然后您才能繼續執行代碼。
更新
我在上面的文字中沒有說得足夠清楚。 每當您更改 DLL 的接口時,您必須執行以下操作:
您的 dll 中似乎缺少Music::Music(class Music const &)
。 ??0Music@@QAE@ABV0@@Z
是這個函數的重命名。 您可以使用此站點對函數名稱進行解構。
再次查看編譯器標志以檢查是否包含-static-libstdc++。在這種情況下,您必須重建應用程序。
在你的 C++ 代碼中試試這個
extern "C"
{
inline __declspec(dllexport) int MyFunction()
{
return 63;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.