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

原创 2016年06月02日 11:30:53

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

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

dll中导出函数 DLL_EXPORT void DoString(CString& str); 如果exe和dll都是/MD,一切正常 如果dll /MTd,exe /MDd 则找不到DoSt...
  • he_zhidan
  • he_zhidan
  • 2016年06月02日 11:30
  • 204

关于使用CString 出现的问题

1、CString是一个很好用的结构体。我也是因为偶然的原因,用到了。当然遇见了很多的问题,还有一些精髓需要领悟。一些比较好的blog: 讲解CString的一些机制 http://blog....
  • cogbee
  • cogbee
  • 2013年05月08日 11:01
  • 4823

VC编译选项 多线程(/MT) 多线程调试(/MTd) 多线程 DLL (/MD) 多线程调试 DLL (/MDd)

VC编译选项 多线程(/MT) 多线程调试(/MTd) 多线程 DLL (/MD) 多线程调试 DLL (/MDd)
  • vip_member888
  • vip_member888
  • 2017年06月16日 13:27
  • 512

多线程调试 DLL (/MDd)

123
  • hzl8908
  • hzl8908
  • 2015年05月14日 15:32
  • 905

VC释放资源文件DLL,EXE等。。。

/** @Name: ReleaseResFile @Brief 释放资源文件 @Param: WORD wResID 资源ID @Param: LPCTSTR szRes...
  • friendan
  • friendan
  • 2015年11月07日 14:32
  • 1729

C++获取当前模块的路径(dll/exe)

最近整理了一些获取当前模块路径的代码,都是通过调用 GetModuleFileName() 来获取 DWORD WINAPI GetModuleFileName( _In_opt_ ...
  • oyt123
  • oyt123
  • 2015年02月05日 18:57
  • 3563

VS2005 Debug版,dll /MTd,exe /MDd的潜在bug

VS2005 Debug版,dll /MTd,exe /MDd的潜在bug dll中: void DoStr(std::string& str) {  str += "123456789012...
  • he_zhidan
  • he_zhidan
  • 2016年06月02日 10:12
  • 327

关于多线程 DLL (/MD)与多线程调试(/MTd) .

在程序中如果将 配置属性-》C/C++-》代码生成-》运行时库  由DLL (/MD)改为多线程调试(/MTd)时重新编译会报错:fatal error C1189: #error :  Please...
  • sheila_1988
  • sheila_1988
  • 2011年10月25日 09:08
  • 3379

各种DLL制作方法

一.创建MFC 的常规DLL(设工程名为MyDLL1)(详工程F:/VcSample/DLL示例/DLL动态联接库之构共享内存)1.     新建工程MFC AppWizard(dll),选第二项- ...
  • guanchanghui
  • guanchanghui
  • 2007年05月22日 15:54
  • 5931

dll导出中函数中使用CString类型的参数引发的ESP出错

分类: C、VC/MFC J、PLC2010-05-19 22:05 551人阅读 评论(2)收藏 举报 今天下午花了很久去调试这个bug,因为自己一个dll函数参数的疏忽,导致浪费...
  • ddjj_1980
  • ddjj_1980
  • 2012年10月12日 12:58
  • 1006
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VS2005 Debug版,dll /MTd,exe /MDd 跨dll使用CString的链接错误
举报原因:
原因补充:

(最多只允许输入30个字)