找不到入口点

时间:2013-06-16 18:21:59

标签: c++ dll

我在尝试运行一个应用程序时遇到了一个奇怪的错误(我还没有改变代码一段时间,因为它工作正常)链接到我的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   
---------------------------

我不知道如何解释这个错误。我知道我做了什么改变,我的代码看起来很好。我试过谷歌搜索,一点也没有运气。

任何人都可以对此有所了解吗?这个错误意味着什么?

4 个答案:

答案 0 :(得分:3)

您正在链接到已使用错位名称导出的函数,该名称为??0Music@@QAE@ABV0@@Z。正在加载的DLL不会导出该名称的函数,从而导致错误。

名称mangling对函数的名称,参数和返回值进行编码。因此,导致不匹配的最可能原因是您已在一个地方更改了该功能的名称,参数或返回值,而不是另一个地方。

如果您更改了DLL,则需要重新编译它以生成新的.lib和.dll文件。您还将修改.h文件。确保链接到DLL的程序使用所有这三个文件的修改版本。

此错误消息实际上对您有帮助,因为在您继续执行代码之前,它将确保接口的两端都匹配。

<强>更新

我在上面的文字中没有说清楚。每当您更改DLL的界面时,您必须执行以下操作:

  1. 更新应用程序使用的任何.h文件。
  2. 重新编译DLL以生成新的.lib和.dll文件。
  3. 使用更新的.lib和.h文件重新编译应用程序。
  4. 分发新的.dll文件,以便更新的应用程序加载更新的DLL。

答案 1 :(得分:2)

您的dll似乎缺少函数Music::Music(class Music const &)??0Music@@QAE@ABV0@@Z是此函数的错位名称。您可以使用this site对函数名称进行解码。

答案 2 :(得分:1)

再次查看编译器标志以检查是否包含 -static-libstdc++。在这种情况下,您必须重新构建应用程序。

答案 3 :(得分:0)

在c ++代码中尝试这个

extern "C"
{
   inline  __declspec(dllexport)  int MyFunction()
  {
     return  63;
  }
}