软件架构师何志丹

软件架构师何志丹的理念:尚贤 非命 节用

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

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

阅读更多
个人分类: VCMFC
上一篇VS2005 Debug版,dll /MTd,exe /MDd的潜在bug
下一篇FD_CONNECT 为什么没触发?
想对作者说点什么? 我来说一句

多线程调试 DLL (/MDd)

123

hzl8908 hzl8908

2015-05-14 15:32:34

阅读数:1101

没有更多推荐了,返回首页

关闭
关闭