11

在 Raymond Chen 的一个帖子中,他似乎可以从修饰名称中知道函数的未修饰名称。我不知道他怎么能这样做。

以这个装饰的名字,

?GetName@PushButton@UILibrary@@UAEPB_WPAPAVStringHolder@2@@Z

每个组件是什么意思?

4

3 回答 3

15

为了避免猜测,并且仍然没有真正使用工具,该UnDecorateSymbolName功能可能有用。我希望能给出一个权威的正确答案。

要手动执行此操作,此页面包含有关该方案的一些信息,这些.

基本大纲是_name@scope@scope@@parameters@something@@something。我怀疑最后两部分是堆栈大小和调用约定或类似的,但文档可能有更多细节。

于 2012-02-07T14:07:51.350 回答
7

名称修饰取决于编译器。

在您链接的文章中,Raymond 正在使用 MS util(未命名)来删除重整。

这是一个表格,显示了常见的编译器是如何处理的。

于 2012-02-07T14:04:52.087 回答
6

Microsoft Visual Studio 附带一个 undname.exe 工具。

http://msdn.microsoft.com/en-us/library/ms937379.aspx

如果您在默认位置有 MS VS,您可以使用:

"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\undname.exe" ?GetName@PushButton@UILibrary@@UAEPB_WPAPAVStringHolder@2@@Z

Microsoft (R) C++ 名称 Undecorator 版权所有 (C) Microsoft Corporation。版权所有。

取消装饰:-“?GetName@PushButton@UILibrary@@UAEPB_WPAPAVStringHolder@2@@Z”是:-“public: virtual wchar_t const * __thiscall UILibrary::PushButton::GetName(class UILibrary::StringHolder * *)”

于 2012-07-26T20:44:04.997 回答