1. 程式人生 > >在非MFC專案中使用CString

在非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,然後提示錯誤

錯誤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)" ([email protected]
@[email protected][email protected][email protected]@[email protected]@@@@[email protected]@[email protected]@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> > >)" (
[email protected]
@[email protected][email protected][email protected]@[email protected]@@@@[email protected]@[email protected]@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)" ([email protected]@[email protected][email protected][email protected]@[email protected]@@@@[email protected]@[email protected]@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> > >)" ([email protected]@[email protected][email protected][email protected]@[email protected]@@@@[email protected]@[email protected]@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

https://social.msdn.microsoft.com/Forums/sqlserver/zh-CN/22942bc0-1804-425a-a533-b5ed1d7ce892/mfccstring 我新建了一個C++空專案,設定了多執行緒除錯,共享DLL中使

C++:在MFC程式如何引用CString

在當今軟體設計界裡還是小有名氣的,說它是MFC中使用的最多的類一點也不過,然而在一些地方並不支援這個類,的的確確會有很大的不方便,本文討論的是在非mfc程式中使用CString類的方法,算是個引子,如果有更好的實現方法,歡迎大家討論。 為了使用CString類,首先原始檔必須是以cpp結尾的,這是因為vc

MFC工程使用MFC

div content alt 重復 出現 mar 防止 pop .cpp 目錄(?)[-] 需求說明 常見問題 問題分析 參考解決方法 我的解決方案 Stdafxh的原理 需求說明 C++工程的類型有很多,從VS(或VC)可以看

MFC專案:報錯:“fatal error LNK1561: 必須定義入口點”解決方法

編譯的時候,報錯:“fatal error LNK1561: 必須定義入口點”   解決方案1: 右鍵->屬性->連結器->高階->入口點,設定成:WinMainCRTStartup       解決方案2: 右鍵->屬性-&

VS2008下MFC工程使用CString類庫

  想用控制檯工程又想使用CString,畢竟方便啊,在VS2008下如果建非MFC工程而又使用CString會出現如下錯誤:1、error C2065: “CString”: 未宣告的識別符號解決方法:將#include <afx.h>新增在程式開始處,或將其放在stdafx.h預編譯頭中。2、

MFC專案使用Quick PDF Library Lite讀寫pdf檔案

簡介   Debenu Quick PDF Library是一個強大的PDF控制元件庫,可以幫助開發者在自己的應用程式中新增處理PDF檔案的功能,僅僅需要幾行程式碼就可以建立,渲染,列印,加強安全,合併,分割和操作PDF檔案。它包含超過900個函式,

記錄在ssm框架專案使用攔截器攔截登入請求遇見的問題

1.使用spring中的filter時,會出現bean注入失敗。這個問題一直沒解決。 報錯原因:web應用啟動的順序是:listener->filter->servlet,而因為專案應用了spring mvc,所以我們會有兩個配置檔案(applixationContext.xml和sp

VC++6.0 MFCCString與int、double、float等資料互相轉化

C++中doulbe/float/int轉為CString的方法 在MFC程式中,可以使用Format方法方便的實現int、float和double等數字型別轉換為CString字串。以下是CString的Format支援的格式說明: C++表達方式 資

基於MFC的實時視覺化專案檢視重新整理訊息的嚴謹使用

        在實時可視專案中,檢視的實時重新整理顯示對軟體的體驗感來說非常重要,當演算法的效率達到實時,比如一秒40幀,如果實時顯示幀率更不上,則體驗感將大大折扣,讓使用者感覺你的演算法並沒有40幀,當然最關鍵的是解決顯示的效率問題。  

MFC CString, Char*, string, int 轉換

今天寫工具時,遇到CString和char* 轉換,百度學習了一下,搬過來一個較好的總結,供大家一起分享,討論~ 一、    將CString類轉換成char*(LPSTR)型別 方法一,使用強制轉換。例如:  CString theS

MFCCString類字串與長整型、浮點型、字元陣列char資料之間的相互轉換

一、長整型資料與CString類字串相互轉換 1.將長整型資料轉換為CString字串類 CString str; long ld; str.Format(_T("%ld"),ld); 2.將CString字串類轉換為長整型資料 CString str; long ld; ld=

解決maven專案引用maven工程的jar

執行如下命令,根據實際情況進行調整: 開啟cmd執行如下命令 格式程式碼: mvn install:install-file -DgroupId=<your_group_name> -DartifactId=<your_artifact_name> -D

MFCCString 與char*相互轉化

CString->char* CString str = _T("1234"); USES_CONVERSION; char* p = T2A(str.GetBuffer(0)); str.ReleaseBuffer(); char*->CString ch

有個傻子要讓我寫篇文章,給她講講AOP、IOC在專案怎麼用。

AOP:面向切面程式設計 SpringMVC元件註解的方式 > @ControllerAdvice是一個@Component,用於定義@ExceptionHandler,@InitBinder和@ModelAttribute方法,適用於所有使用@Re

實戰c++的string系列--std::string與MFCCString的轉換

搞過MFC的人都知道cstring,給我們提供了很多便利的方法。 CString 是一種很有用的資料型別。它們很大程度上簡化了MFC中的許多操作,使得MFC在做字串操作的時候方便了很多。不管怎樣,使用CString有很多特殊的技巧,特別是對於純C背景下走出來的

關於MFCCString的用法小結

今天被兩個問題折騰了好久,一個是關於結構體陣列傳遞值的問題,就是不知道結構體指標傳遞形參到子函式後,如何被子函式分解並繼續使用,測試過程中老是隻能在結構體陣列的第一個元素進行操作,後面的操作就會提示“訪問越界”之類的提示,真是傷透了腦筋。 第二個問題是關於遇到結構體陣列不

VC++ MFCCString類完美總結(整理)

CString位於標頭檔案afx.h中。①、CString 類物件的初始化:CString str;CString str1(_T("abc"));CString str2 = _T("defg");TCHAR szBuf[] = _T("kkk");CString str3(szBuf);CString s

mavean專案,對mavean管理的第三方jar包處理

通常情況下用mavean打包的時候,對非mavean管理的第三方jar包只需要在pom.xml 里加入如下配置就行了。 <plugin>   <artifactId>maven-compiler-plugin</artifactId>&

MFCCString與string的區別以及相互轉換關係

區別: CString 類是微軟的visual c++提供的MFC裡面的一個類,所以只有支援MFC的工程才可以使用。如在linux上的工程就不能用CString了,只能用標準C++中的 string類了。另外,因為string類是在c++標準庫中,所以它被封裝在了std名稱

MFCCString的使用總結

在使用MFC的過程中,不可避免的要使用CString型別對字串進行處理,特別常用的是CString與char*等型別的轉換,現將平時常用的方法整理如下。 1.CString型別的初始化 CStrin