C++ 命名修饰 : QBE_NXZ QAE_NXZ

标签 c++ dll

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

程序崩溃 “程序入口点 ?FunName@ClassName@@QAE_NXZ 无法位于动态链接库 XXX.dll 中”

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

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

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

C++ 名称修改是否也是特定于编译器的?

最佳答案

您可以使用 Visual Studio 随附的 undname.exe 实用程序来取消命名。在这种情况下:

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 程序来分解名称。

关于C++ 命名修饰 : QBE_NXZ QAE_NXZ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13707980/

相关文章:

c++ - 如何初始化一个常量 CLSID

c++ - 通过 const 引用延长临时生命周期

c++ - 如何使用 boost::date_time 在本地时间和世界时间之间进行转换?

c++ - 如何在Visual Studio代码中使用第三方DLL

java - 从现有外部 .dll 调用方法。例如,来自 kernel32.dll 的 CopyFileA

winapi - 如何找出DLL文件的API函数?

c++ - 已声明但未定义的静态方法错误 C++

c++ - 这个 C++ 模板参数推导不正确吗?

c# - 顺序 GUID

c# - 从 .NET 验证 dll 具有有效签名并且未被修改