0
我正在处理一个包含函数DLLEXPORT void* GetBase(HANDLE hProc)
的DLL,当我编译它时,我用Dependency Walker打开它,并且没有名称为“GetBase”的函数。我只能看到“?GetBase @@ YAPAXPAX @ Z”。这有什么问题?我正在使用Visual C++ 2013,并将其编译为版本。DLL坏功能名称
我正在处理一个包含函数DLLEXPORT void* GetBase(HANDLE hProc)
的DLL,当我编译它时,我用Dependency Walker打开它,并且没有名称为“GetBase”的函数。我只能看到“?GetBase @@ YAPAXPAX @ Z”。这有什么问题?我正在使用Visual C++ 2013,并将其编译为版本。DLL坏功能名称
你的功能没有什么“错误”。它已经“被打乱”了;换句话说,编译器为你的函数名添加了类型信息。这就是C++如何支持重载:具有相同名称但采用不同参数的函数将具有不同的损坏函数名称。
您的DLL可能也有debug info attached,这可能是另一个名称混乱的来源。
说了这么多,你问题上的“c”标签很麻烦; C没有超载,因此不需要改名。
您正在将代码构建为C++。文件扩展名是.cpp还是.c? – cup
文件扩展名是“.cpp”。 –
这是完全正常的,C++编译器将*装饰*函数名称。必要的,以便重载的方法将有不同的链接名称。使用'extern“C”'来禁止它。不要压制它,当你改变函数声明并且不更新使用它的代码时,这是避免麻烦的好方法。 –