我在尝试运行一个应用程序时遇到了一个奇怪的错误(我还没有改变代码一段时间,因为它工作正常)链接到我的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
---------------------------
我不知道如何解释这个错误。我知道我做了什么改变,我的代码看起来很好。我试过谷歌搜索,一点也没有运气。
任何人都可以对此有所了解吗?这个错误意味着什么?
答案 0 :(得分:3)
您正在链接到已使用错位名称导出的函数,该名称为??0Music@@QAE@ABV0@@Z
。正在加载的DLL不会导出该名称的函数,从而导致错误。
名称mangling对函数的名称,参数和返回值进行编码。因此,导致不匹配的最可能原因是您已在一个地方更改了该功能的名称,参数或返回值,而不是另一个地方。
如果您更改了DLL,则需要重新编译它以生成新的.lib和.dll文件。您还将修改.h文件。确保链接到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;
}
}