C DLL错误的函数名

C DLL错误的函数名,c,dll,C,Dll,我正在处理一个DLL,其中包含函数DLLEXPORT void*GetBaseHANDLE hProc,当我编译它时,我用Dependency Walker打开它,没有函数名为GetBase。我只能看到?GetBase@@YAPAXPAX@Z.这个怎么了?我使用Visual C++ 2013,我把它编译成发行版。 你的功能没有错。它被弄坏了;换句话说,编译器将类型信息添加到函数名中。这就是C++支持重载的方式:同名函数,但采用不同的参数,将有不同的函数名。 您的DLL也可能有,这可能是名称混乱的

我正在处理一个DLL,其中包含函数DLLEXPORT void*GetBaseHANDLE hProc,当我编译它时,我用Dependency Walker打开它,没有函数名为GetBase。我只能看到?GetBase@@YAPAXPAX@Z.这个怎么了?我使用Visual C++ 2013,我把它编译成发行版。

你的功能没有错。它被弄坏了;换句话说,编译器将类型信息添加到函数名中。这就是C++支持重载的方式:同名函数,但采用不同的参数,将有不同的函数名。 您的DLL也可能有,这可能是名称混乱的另一个来源


尽管如此,你的问题上的c标签还是很麻烦的;C没有重载,因此不需要名字的修改。

你正在把你的代码构建成C++。文件扩展名。CPP还是.c?文件扩展名是.cpp。这完全正常,C++编译器将修饰函数名。这是必需的,以便重载方法将具有不同的链接名称。使用extern C来抑制它。不要抑制它,当您更改函数声明而不更新使用它的代码时,这是避免麻烦的好方法。现在它没有显示任何内容。另一种方法是将文件扩展名重命名为.c并将其构建为c DLL。