9

我在尝试运行链接到我的 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

4 回答 4

4

您正在链接到一个已使用损坏名称导出的函数,该名称为??0Music@@QAE@ABV0@@Z. 正在加载的 DLL 不会导出该名称的函数,因此会出现错误。

名称修饰对函数的名称、参数和返回值进行编码。因此,不匹配的最可能原因是您在一处更改了函数的名称、参数或返回值,而另一处未更改。

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

此错误消息实际上对您很有帮助,因为它将确保界面的两侧匹配,然后您才能继续执行代码。

更新

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

  1. 更新应用程序使用的任何 .h 文件。
  2. 重新编译 DLL 以生成新的 .lib 和 .dll 文件。
  3. 使用更新的 .lib 和 .h 文件重新编译应用程序。
  4. 分发新的 .dll 文件,以便更新的应用程序加载更新的 DLL。
于 2013-06-16T18:28:38.350 回答
3

Music::Music(class Music const &)您的 dll 中似乎缺少该功能。??0Music@@QAE@ABV0@@Z是这个函数的名称。您可以使用此站点对函数名称进行分解。

于 2013-06-16T18:30:14.123 回答
2

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

于 2021-03-28T16:02:10.513 回答
0

在你的 C++ 代码中试试这个

extern "C"
{
   inline  __declspec(dllexport)  int MyFunction()
  {
     return  63;
  }
}
于 2018-01-31T07:30:34.337 回答