0

首先,这一切都是用 MS VS 完成的。

程序崩溃并显示“过程入口点?FunName@ClassName@@QAE_NXZ 无法在动态链接库 XXX.dll 中找到”

我在依赖walker中打开了XXX.dll,我能找到的只有

FunName@ClassName@@QBE_NXZ,而不是 FunName@ClassName@@QAE_NXZ。

我知道重建 XXX.dll 会解决这个问题,但 QBE_NXZ 和 QAE_NXZ 有什么区别?

c++ 名称修饰也是编译器特定的吗?

4

1 回答 1

3

您可以使用undname.exeVisual Studio 附带的实用程序来解开名称。在这种情况下:

C:\>undname "?FunName@ClassName@@QAE_NXZ"
Undecoration of :- "?FunName@ClassName@@QAE_NXZ"
is :- "public: bool __thiscall ClassName::FunName(void)"


C:\>undname "?FunName@ClassName@@QBE_NXZ"
Undecoration of :- "?FunName@ClassName@@QBE_NXZ"
is :- "public: bool __thiscall ClassName::FunName(void)const "

如您所见,区别在于成员函数是否const存在。

名称修饰是特定于编译器的。对于 GCC,您可以使用该c++filt程序来解开名称。

于 2012-12-04T17:06:44.673 回答