DLL的导出函数依赖于

时间:2012-04-11 12:01:26

标签: dll dllexport depends

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

??0Function Name@@QEAA@AEBV0@@Z

0也可能被其他一些数字取代。

@@和字母数量有所不同。

有人可以说出他们代表什么吗?

2 个答案:

答案 0 :(得分:1)

这是由C ++编译器修饰的C ++标识符的名称。您可以从Visual Studio命令提示符运行undname.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 ++支持重载。您可以使用extern "C"来抑制装饰,但这不适用于C ++类。

答案 1 :(得分:0)

在某些情况下,您可能有兴趣使用Microsoft提供的API UnDecorateSymbolName以编程方式解开这些名称。