簡體   English   中英

未找到入口點

[英]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 的接口時,您必須執行以下操作:

  1. 更新應用程序使用的任何 .h 文件。
  2. 重新編譯 DLL 以生成新的 .lib 和 .dll 文件。
  3. 使用更新的 .lib 和 .h 文件重新編譯應用程序。
  4. 分發新的 .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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM