DLL'的导出函数;如你所见

DLL'的导出函数;如你所见,dll,dllexport,depends,Dll,Dllexport,Depends,我在查看使用depends从dll导出的函数列表时,注意到名称中包含一些奇怪的符号。它们的格式相同 ??0功能名称@@QEAA@AEBV0@@Z 也可以用其他数字替换0 @@的数量和字母表各不相同 P>谁可以说出它们代表什么?< /P> < P>这是由C++编译器修饰的C++标识符的名称。您可以从VisualStudio命令提示符运行DunNAME.EXE实用工具,将其转换回原来的C++声明: C:\>undname ??0Foo@@QEAA@AEBV0@@Z Microsoft (R)

我在查看使用depends从dll导出的函数列表时,注意到名称中包含一些奇怪的符号。它们的格式相同

??0功能名称@@QEAA@AEBV0@@Z

也可以用其他数字替换0

@@的数量和字母表各不相同


<> P>谁可以说出它们代表什么?< /P> < P>这是由C++编译器修饰的C++标识符的名称。您可以从VisualStudio命令提示符运行DunNAME.EXE实用工具,将其转换回原来的C++声明:

C:\>undname ??0Foo@@QEAA@AEBV0@@Z
Microsoft (R) C++ Name Undecorator
Copyright (C) Microsoft Corporation. All rights reserved.

Undecoration of :- "??0Foo@@QEAA@AEBV0@@Z"
is :- "public: __cdecl Foo::Foo(class Foo const & __ptr64) __ptr64"

这使得它成为Foo类的复制构造函数,编译为64位代码。据我所知,精确的装饰算法没有文档记录。通常,名称装饰用来避免链接符号冲突,因为C++支持重载。你可以通过使用<代码>外部“C”<代码>来抑制装饰,但这不能在C++类上工作。

< P>在某些情况下,你可能会有意使用API提供的程序来对这些名称进行无修饰。