首页 > 其他分享 >VS2005 Debug版,dll /MTd,exe /MDd 跨dll使用CString的链接错误

VS2005 Debug版,dll /MTd,exe /MDd 跨dll使用CString的链接错误

时间:2022-10-05 11:02:49浏览次数:64  
标签:exe DoString VS2005 ATL dll StrTraitMFC DV


dll中导出函数
DLL_EXPORT void DoString(CString& str);
如果exe和dll都是/MD,一切正常
如果dll /MTd,exe /MDd 则找不到DoString,错误提示:
error LNK2019: 无法解析的外部符号 "__declspec(dllimport) void __cdecl DoString(class ATL::CStringT<char,class StrTraitMFC<char,class ATL::ChTraitsCRT<char> > > &)" (​​​__imp_?DoString@@YAXAAV?$CStringT@DV?$StrTraitMFC@DV​​?

​$ChTraitsCRT@D@ATL@@@@@ATL@@@Z​​​),该符号在函数 "public: void __thiscall CtestexeDlg::OnBnClickedButton1(void)" (​​?OnBnClickedButton1@CtestexeDlg@@QAEXXZ​​​) 中被引用
1>../Debug\testexe.exe : fatal error LNK1120: 1 个无法解析的外部命令
用depend工具查看了dll导出的DoString,两者差距如下:
​​​?DoString@@YAXAAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z​​​)
​​​?DoString@@YAXAAV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z​

一个是StrTraitMFC,另一个是StrTraitMFC_DLL。
注意:
VS2005中,跨dll操作CString,只有dll和exe都是MD或MT,就正常。不一致,链接时报错。跨dll操作std::string,只有exe和dll都是MD才正常,其他情况不报错,直接崩溃。

标签:exe,DoString,VS2005,ATL,dll,StrTraitMFC,DV
From: https://blog.51cto.com/u_15724537/5732406

相关文章