在非MFC项目中使用CString

https://social.msdn.microsoft.com/Forums/sqlserver/zh-CN/22942bc0-1804-425a-a533-b5ed1d7ce892/mfccstring

我新建了一个C++空项目,设置了多线程调试,共享DLL中使用MFC,引用大致是这样

#if !defined(_MINISQL_H_)
#define _MINISQL_H_

#include<afx.h>
#include<iostream>
#include<atlstr.h> 
#include<stdlib.h>
#include<math.h>
#include<direct.h>

然后在下文中使用了CString,然后提示错误

错误 3 error LNK2019: 无法解析的外部符号 "class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > > __cdecl use_clause(class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > >,int)" (?use_clause@@YA?AV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@V12@H@Z),该符号在函数 "class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > > __cdecl Interpreter(class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > >)" (?Interpreter@@YA?AV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@V12@@Z) 中被引用 C:\Users\Administrator\Desktop\作业\MiniSQL\Interpreter.obj MiniSQL

错误 4 error LNK2019: 无法解析的外部符号 "class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > > __cdecl delete_clause(class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > >,int)" (?delete_clause@@YA?AV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@V12@H@Z),该符号在函数 "class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > > __cdecl Interpreter(class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > >)" (?Interpreter@@YA?AV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@V12@@Z) 中被引用 C:\Users\Administrator\Desktop\作业\MiniSQL\Interpreter.obj MiniSQL

要怎样才能绕过MFC使用CString呢


您好,

在非MFC工程中使用CString类,只要包含atlstr.h头文件就可以了,也不需要设置“共享DLL中使用MFC”。

如果包含afx.h也可以,但是afx.h还包含了很多额外的东西,并且必须设置“共享DLL中使用MFC”。此外,包含了Windows.h的工程不能再包含afx.h头文件。

关于上述的错误信息,是因为同时引用了atlstr.h和afx.h两个头文件。而CString类型的默认模板在MFC(afx.h)和ATL(atlstr.h)中是不一样的。相当于CString类型在程序中有两种不同的实现,导致LNK2019的错误。

如果要使用MFC中的CString,则不能绕过MFC;
如果要使用ATL中的CString,则可以绕过MFC;



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值