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

来源:互联网 发布:淘宝购物车营销靠谱吗 编辑:程序博客网 时间:2024/04/28 16:25

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才正常,其他情况不报错,直接崩溃。

0 0