繁体   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