在非MFC项目中使用CString
2015-04-18 14:52
295 查看
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,然后提示错误
错误3error
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.objMiniSQL
错误4error
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.objMiniSQL
要怎样才能绕过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;
我新建了一个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,然后提示错误
错误3error
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.objMiniSQL
错误4error
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.objMiniSQL
要怎样才能绕过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;
相关文章推荐
- 非MFC项目使用CString及如何打印
- MFC中CString的Format方法使用技巧
- 在MFC中使用Cstring
- WinCE的非MFC程序中使用CString
- VS2010修改C++项目为“静态库中使用MFC”编译问题
- vs2010 mfc项目配置属性的字符集为Unicode和多字节时,两者转换后使用的控件外观不一样
- VC++非MFC项目中如何使用TRACE宏
- 使用C++编写类似MFC的CString,部分功能,重新复习使用操作符重载
- 在vs2003的Win32项目中使用 MFC
- VC/MFC项目开发——使用回调函数为CListCtrl排序(k_eckel转自微软高校博客K_eckel's mindview)
- 关于MFC项目中使用CDHtmlDialog禁止脚本错误的方法
- MFC项目中使用CUDA的原则性说明
- MFC项目中使用CUDA的原则性说明
- 关于MFC项目中使用CDHtmlDialog禁止脚本错误的方法
- VC程序在非MFC中使用CString
- MFC AtlMap<CString, ?>使用
- VC++非MFC项目中如何使用TRACE宏
- MFC CString 查找函数使用的三个失误
- MFC中CString的Format方法使用技巧
- MFC项目使用webbrowser控件,点击载入的页面里的文件下载链接后导致程序的崩溃问题的解决方案