2012-12-04 54 views
0

首先這一切都是用MS VS完成的。C++命名修剪:QBE_NXZ QAE_NXZ

與 程序崩潰「程序輸入點?FunName @類名@@ QAE_NXZ不能設在動態鏈接庫XXX.dll」

我在Dependency Walker中打開XXX.dll和所有我能找到是

FunName @ ClassName @@ QBE_NXZ,Not FunName @ ClassName @@ QAE_NXZ。

我知道重建XXX.dll會解決這個問題,但是QBE_NXZ & QAE_NXZ有什麼區別?

也是C++名稱mangling是編譯器特定的嗎?

+1

名稱mangling確實是編譯器特有的。 –

+1

這裏你去:http://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B_Name_Mangling ---祝你好運! :) – NPE

+0

感謝維基鏈接以及 – Gob00st

回答

3

您可以使用Visual Studio附帶的undname.exe實用程序來取消名稱。在這種情況下:

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


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

因此,大家可以看到不同的是成員函數是否const與否。

名稱修改是編譯器特定的。對於GCC,您可以使用c++filt程序來取消名稱。

+0

感謝這很好地工作,而無需查看大的VS名稱mangling wiki頁面:)而且我懷疑有人做了沒有從Perforce完全同步的構建,所以const不包括和後來的版本確實有這個常量! – Gob00st