国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
VC6.0 轉(zhuǎn) VS2005
AutoPDMS8.0源碼使用高版本ObjectARX(2004/2007)編譯的總結(jié)

以下是引用uesoft在2007-11-21 15:14:29的發(fā)言:

原文作者:楊志軍,長(zhǎng)沙優(yōu)易軟件開發(fā)有限公司CAD部

AutoPDMS8.0源碼使用高版本ObjectARX(2004/2007)編譯的總結(jié)

一、開始編譯之前
1. ObjectARX 2002工程向ObjectARX 2004工程升遷時(shí)的準(zhǔn)備工作

1.1 編譯工具
AutoPDMS8.0是在VC 6.0下開發(fā)的,使用ARX 2002(含)以下的版本時(shí),用VC 6.0編譯。
如果使用ARX 2004,則則需要使用VS .NET 2002編譯,因?yàn)锳RX 2004自身是用VS .NET 2002編譯的,它的圖形顯示部分使用的MFC庫(kù)高于VC6.0自帶的版本。
同樣,ARX2007及更高版本要求使用VS .NET 2005編譯。
VS .NET 2002、2005等高版本的編譯器可直接轉(zhuǎn)換VC6.0生成的工程,這給編譯時(shí)工程的配置帶來很大的方便。

1.2 ARX動(dòng)態(tài)庫(kù)的變化
從網(wǎng)絡(luò)查詢得到的資料來看,每個(gè)引用了ARX動(dòng)態(tài)庫(kù)的工程配置需要改變。
首先,引用的ARX動(dòng)態(tài)庫(kù)名稱為XXX15.lib的全部要改寫成XXX16.lib(ARX 2004)或XXX17.lib(ARX 2007);動(dòng)態(tài)庫(kù)名稱中沒有帶"15"字樣的,保持不變。
其次,有一些ARX 2002里的動(dòng)態(tài)庫(kù),在高版本的ARX SDK里已經(jīng)整合到一起,需要在工程配置中去掉:acrx15.lib、acsiobj.lib、acutil15.lib。
再次,ARX 2007 是用Unicode方式編譯的,這意味著它提供的接口函數(shù)的所有字符串類型參數(shù)、數(shù)據(jù)結(jié)構(gòu)、返回類型都是寬字符的(wchar_t)。編譯過程中必須要考慮這點(diǎn),否則不能通過編譯,更不能通過鏈接。關(guān)于這里的分析和處理過程,詳見"字符轉(zhuǎn)換"部分。

2. 確定哪些動(dòng)態(tài)庫(kù)可以共享
AutoPDMS8.0工程中,大部分直接依賴ARX的動(dòng)態(tài)庫(kù)在圖形顯示等模塊,雖然很多工程都需要?jiǎng)討B(tài)庫(kù)acge15.lib,但我們只用到其中坐標(biāo)信息等幾個(gè)基本的數(shù)據(jù)結(jié)構(gòu)(不涉及到字符串),它們?cè)诟靼姹镜腁RX中可以通用(后來編譯時(shí)證明了周進(jìn)的這個(gè)判斷是正確的),在這個(gè)基礎(chǔ)之上,我們是否可以將這些只依賴于acge15.lib或干脆一點(diǎn)也不依賴于ARX的工程,編譯出一個(gè)版本讓它們共用;直接依賴于ARX的工程針對(duì)不同版本的ARX編譯出不同版本。然后讓它們組合產(chǎn)生適應(yīng)各版本Auto CAD平臺(tái)的AutoPDMS 軟件。這樣維護(hù)的時(shí)候能簡(jiǎn)化很多工作。

編譯時(shí)我們向這個(gè)目標(biāo)前進(jìn),首先證實(shí)了VC 6.0的確不能編譯ARX 2004,之后發(fā)現(xiàn)VS .NET 2002編譯出的動(dòng)態(tài)庫(kù)在VC 6.0下不能正常使用,很可能是兩種編譯器產(chǎn)生的動(dòng)態(tài)庫(kù)導(dǎo)出函數(shù)命名規(guī)則不一樣,VC 6.0按照自己的導(dǎo)出函數(shù)命名規(guī)則不能正確的解析VS .NET 2002生成的庫(kù)文件(.lib)。反過來,VS .NET 2002也不能完全兼容VC 6.0的動(dòng)態(tài)庫(kù),當(dāng)VC 6.0生成的動(dòng)態(tài)庫(kù)中接口有字符串參數(shù)的話,VS .NET 2002鏈接時(shí)不能識(shí)別。再次,Auto PDMS2.0也不只是底層動(dòng)態(tài)庫(kù)直接依賴于ARX,一些設(shè)計(jì)部分的工程因特殊需求,也需要使用ARX動(dòng)態(tài)庫(kù)。這些將可能"共用"的部分限定到一些獨(dú)立的可執(zhí)行文件和少數(shù)不依賴于ARX的動(dòng)態(tài)庫(kù),如持久層等。

二、編譯時(shí)碰到的一些問題
VS .NET 2002/2005在編譯期間,執(zhí)行的語(yǔ)法檢查比VC更嚴(yán)格。一些在VC 6.0下還能正確通過編譯連接的不規(guī)范寫法,到高版本的編譯器里就直接報(bào)錯(cuò)了。下面提出的問題在VC6.0都是沒有的,只在.Net 2002或 2005里出現(xiàn)。常見的有下面幾種:

1. for循環(huán)循環(huán)變量作用域問題
for( int i = XX; ... ) { /* i的作用域 */;} /* for循環(huán)外 i 不能被引用 */。編譯時(shí)VS .NET2005提示的錯(cuò)誤里發(fā)現(xiàn)很多地方是因?yàn)閒or循環(huán)變量作用域問題。這種寫法不規(guī)范,在VC6.0里居然是合法的。http://system/dispbbs.asp?boardID=10&ID=2279&page=1

2. 關(guān)于模板的問題
在VS .NET2005下編譯GlobalShare時(shí),出現(xiàn)較多的下面2.2、2.3列出的情況。

2.1 將模板類導(dǎo)出
在模板類前加了 _declspec(dllexport),這個(gè)在VS .NET 2002以后會(huì)直接報(bào)錯(cuò)。這個(gè)問題大家已經(jīng)修正了。

2.2 缺失關(guān)鍵字 typename
在模板中使用模板參數(shù)定義出來的類型,需要加上 typename 關(guān)鍵字。typename關(guān)鍵字平時(shí)使用較少。MFC對(duì)它的解釋是:
The typename keyword tells the compiler that an unknown identifier is a type.
Use this keyword only in template definitions. For example:
// typename.cpp
template class X
{
typename T::Y m_y; // treat Y as a type
};

int main()
{
}

2.3 缺失模板聲明 template<>
模板實(shí)例化時(shí),需要加 template<>。如工程GlobalShare的UeObjectId.h里對(duì)ObjectId類哈希函數(shù)模板的實(shí)例化不規(guī)范,這是在VS .NET 2005里編譯持久層時(shí),提示使用CMap錯(cuò)誤時(shí)發(fā)現(xiàn)的。
/*情況1:不規(guī)范的寫法。"模板實(shí)例化"將不起作用,且編譯器不報(bào)錯(cuò)!*/
AFX_INLINE UINT AFXAPI HashKey(UeObjectId key)
{
return key.HashCode();
}

/*情況2:另一種不規(guī)范的寫法,編譯器會(huì)報(bào)錯(cuò)(比第一種稍好)*/
AFX_INLINE UINT AFXAPI HashKey(UeObjectId key)
{
return key.HashCode();
}

/*情況3:規(guī)范的寫法*/
template<>
AFX_INLINE UINT AFXAPI HashKey(UeObjectId key)
{
// default identity hash - works for most primitive values
//return (DWORD)(((DWORD_PTR)key)>>4);
return key.HashCode();
}

另外在模板類(結(jié)構(gòu))中申明模板,就算不帶新的模板參數(shù),template<>不能省略。
如下面的代碼段(自GlobalShare),在/*#1#*/處須加上"template<>",在/*#2#*/處須加上"typename"。
template 
struct ApplyImpl1
{
template
struct VC_WORKAROUND : public TypeWithNestedTemplate {};

/*#1#*/
struct VC_WORKAROUND
{ template struct In; };

template< typename T1 > struct Result : public
VC_WORKAROUND< ::Loki::Private::AlwaysFalse::value >::template In
{
typedef /*#2#*/ VC_WORKAROUND< ::Loki::Private::AlwaysFalse::value >::template In Base;
};
};

3. const 問題
3.1 拷貝構(gòu)造函數(shù)須聲明為 XXX( const XXX& obj )
3.2 聲明這樣的函數(shù): void dosomething( const XXX*& ptr );在調(diào)用的地方VS .NET 2005報(bào)錯(cuò)。應(yīng)該去掉 '&'。
還有 const 的一些其它不規(guī)范的地方,編譯時(shí)未能記錄下來。

4. 取函數(shù)地址問題
很多地方需要將函數(shù)或類的成員函數(shù)注冊(cè)到容器里,注冊(cè)取函數(shù)地址時(shí),&不能省略。 如全局函數(shù) void XXX( ... ),取其地址 &XXX。如果只寫 XXX,VC 6.0和VS 2002都能通過編譯,而VS 2005不能。
如果是類的成員函數(shù),類似處理。如:
class XXX
{
public:
void DoSomething( ... );
}
在類XXX的某成員函數(shù)(通常是構(gòu)造函數(shù))取 DoSomething的地址: &XXX::DoSomething(...)。

5. 定義函數(shù)指針類型時(shí),不能帶默認(rèn)形參
如: typedef BaseNodeTransaction* (TransactionManager::* Fun)(BOOL bIsNew = TRUE );在VS .NET 2005中將指出錯(cuò)誤。須將 " = TRUE "去掉。

6. C標(biāo)準(zhǔn)頭文件與C++標(biāo)準(zhǔn)頭文件
典型的如是C++為兼容C頭文件方式而定義的頭文件,它的C++版本是。在VS .NET 2005之后已只支持這種寫法,寫會(huì)提示找不到頭文件。它里面聲明的函數(shù)和類型都在名字空間 std 下。

7. 字符串的使用
字符串使用問題有兩種。

7.1 程序中的運(yùn)行時(shí)的提示信息沒有放到資源中
軟件如果發(fā)行多語(yǔ)言版本,將提示信息資源化是必須的。

7.2 程序中使用的字符類型或處理函數(shù)不能支持Unicode
如常量字符串"XXX"的形式要加 _T宏,應(yīng)該使用TCHAR 類型系列替代char系列,應(yīng)該使用支持 Ansi/Unicode的字符串處理宏函數(shù)。關(guān)于該問題的規(guī)定,見:http://system/dispbbs.asp?boardID=32&ID=2271&page=1

由于ARX 2007采用Unicode方式編譯,和我們程序的編譯時(shí)對(duì)字符串的處理方式不同,中間的轉(zhuǎn)換過程在下面介紹。

8. 其它問題
8.1 函數(shù)未定義返回類型。在VS .NET 2005里已不再為其默認(rèn)返回類型為 int,而是提示錯(cuò)誤。
8.2 將對(duì)象賦值NULL。通常的形式是 vector::iterator it = NULL; 這種寫法在 VS .NET 2005里不支持。
8.3 設(shè)備和管道事務(wù)層使用消息機(jī)制時(shí),VS .NET 2002編譯出來的arx庫(kù)發(fā)生全局變量構(gòu)造順序沖突(VC200和5不發(fā)生)。
APDomainFrame/Inc/PDMSFrame.h中定義全局靜態(tài)的常量字符串 和 注冊(cè)消息時(shí)定義的全局驅(qū)動(dòng)消息注冊(cè)的對(duì)象發(fā)生沖突,加載這兩個(gè)模塊的Arx時(shí),AutoCAD提示該Arx無效。暫時(shí)將這兩個(gè)地方注冊(cè)消息時(shí)改為字符串常量。

見到的最多的警告是:warning C4018: '>=' : signed/unsigned mismatch

除代碼問題外,編譯時(shí)發(fā)現(xiàn)一個(gè)編譯器問題:
當(dāng)用VS .NET 2002和2005編譯時(shí),所有的代碼編譯完畢沒出現(xiàn)錯(cuò)誤,之后編譯資源時(shí)有時(shí)候會(huì)產(chǎn)生奇怪的錯(cuò)誤:
Generating Code...
正在編譯資源...
fatal error RC1047: too many -I# options, 'D:/PROJECT/AutoPDMS8.0/StartMoudle/APPDMSLogin/Inc'
項(xiàng)目 : error PRJ0002 : 錯(cuò)誤的結(jié)果 1 (從“D:/Microsoft Visual Studio.NET 2005/VC/bin/rc.exe”返回)。

上網(wǎng)仔細(xì)搜索了后才知道VS .NET 2002和2005的 C++ Include目錄個(gè)數(shù)不能超過100個(gè)。我們AutoPDMS 2.0工程有95個(gè)以上,再加上編譯器自身已有的一些包含文件,總數(shù)的確超過了100個(gè)。只需將已編譯過的跟剩下項(xiàng)目不相關(guān)的包含目錄去掉幾個(gè),需要時(shí)再加。問題就能解決。

三、編譯ARX 2007時(shí)的字符串ANSI/UNICODE問題解決方案
ObjectARX 2007只提供Unicode的庫(kù)和頭文件。也就是說它的數(shù)據(jù)結(jié)構(gòu)、字符串類型都只支持寬字節(jié)方式。當(dāng)發(fā)現(xiàn)這個(gè)問題時(shí),第一時(shí)間發(fā)表到RTX上征求意見和解決方法。大家討論后得到兩種方案:一是將我們的程序也編譯成Unicode方式;一是我們程序仍用普通多字節(jié)方式編譯,在涉及到ARX 2007接口的地方,做臨時(shí)字符串轉(zhuǎn)換。http://system/dispbbs.asp?boardID=52&ID=2234&page=1

方案一的優(yōu)點(diǎn)是徹底,軟件支持Unicode是遲早的。缺點(diǎn)是改動(dòng)的地方較多,代碼中很多地方還無法通過編譯器選項(xiàng),直接從普通多字節(jié)編譯方式轉(zhuǎn)換到寬字節(jié)方式編譯。原因是上面的第7條。另外,就算能完成Unicode方式的編譯工作,軟件一些地方如PDMS數(shù)據(jù)導(dǎo)出、配置文件等地方可能會(huì)產(chǎn)生新的問題??傊绻壳鞍催@種方案實(shí)施,需要較長(zhǎng)的時(shí)間的調(diào)整程序才能適應(yīng)并穩(wěn)定下來。

方案二的優(yōu)點(diǎn)是不影響程序低版本ARX的編譯,可以通過條件編譯控制是否進(jìn)行字符串轉(zhuǎn)換。此外,凡是需要做轉(zhuǎn)換的地方,編譯時(shí)VS .NET 2005會(huì)一一指出(多字節(jié)字符<串>不能默認(rèn)轉(zhuǎn)換為多字節(jié)字符<串>),這為修改做了很好的提示作用,編譯之前不需預(yù)先要了解那些地方使用了ARX的接口、數(shù)據(jù)結(jié)構(gòu),編譯時(shí)逐個(gè)修改就行了。也正因?yàn)檫@樣,和AutoCAD交互的部分也可能產(chǎn)生一些未知的問題,所以需要先完成轉(zhuǎn)換,編譯出一個(gè)版本做出安裝包經(jīng)測(cè)試沒發(fā)現(xiàn)問題后才能將代碼內(nèi)字符串轉(zhuǎn)換的修改檢入到VSS。

就目前情況而言,方案二優(yōu)于方案一。方案二實(shí)施起來有幾個(gè)要注意的地方:字符串轉(zhuǎn)換只能在使用了ARX 2007但程序又不是用Unicode方式編譯的情況下。如果程序沒使用ARX 2007或程序使用Unicode方式編譯,則所有字符串轉(zhuǎn)換的內(nèi)容應(yīng)該不再編譯中出現(xiàn)。這可以用條件編譯實(shí)現(xiàn)。在接受大家都建議后,最終將轉(zhuǎn)換宏定為如下形式:

#if defined ARX2007 && !defined _UNICODE//用了ARX2007或其以上版本,但程序不用UNICODE方式編譯,做字符串轉(zhuǎn)換

#define ConvertToAnsi(x) /
StringConvert::ConvertUnicodeToAnsi(x)
#define ConvertToUnicode(x) /
StringConvert::ConvertAnsiToUnicode(x)
#define ConvertReleaseMemA ConvertToAnsi(NULL)
#define ConvertReleaseMemU ConvertToUnicode(NULL)

#else//否則保持不變

#define ConvertToAnsi(x) x
#define ConvertToUnicode(x) x
#define ConvertReleaseMemA
#define ConvertReleaseMemW

#endif// #if defined ARX2007 && !defiend _UNICODE

其中轉(zhuǎn)換函數(shù) ConvertUnicodeToAnsi(x)和ConvertAnsiToUnicode(x) 的原型如下:
namespace StringConvert
{
_declspec(dllexport) wchar_t* ConvertAnsiToUnicode( IN const char* ptrANSI );
_declspec(dllexport) char* ConvertUnicodeToAnsi( IN const wchar_t* pwUNICODE );
}

宏 ConvertToAnsi(x) 和 ConvertToUnicode(x)用于Ansi與Unicode方式字符串的相互轉(zhuǎn)換。它們直接返回轉(zhuǎn)換后的結(jié)果。
如函數(shù)acdb->getAt( strNeme, ... );在ARX2007下要求第一個(gè)參數(shù)為const wchar_t*類型,那么只需要做臨時(shí)轉(zhuǎn)換:
acdb->getAt( ConvertToUnicode( strName ), ... );
如果編譯時(shí)沒定義預(yù)處理宏ARX2007或使用Unicode方式編譯,上述修改之后的代碼將和修改之前的一樣。

四、"字符串轉(zhuǎn)換"的幾種情況
字符串轉(zhuǎn)換的實(shí)質(zhì)是使目前的非Unicode方式編譯的代碼能使用ObjectARX 2007Unicode方式編譯出的代碼。有些地方只做字符串轉(zhuǎn)換不夠,如下面的3、4、5描述的情況。有些地方只修改我們的代碼不夠,還需要修改ARX 2007的頭文件(如4)。

1. ARX接口函數(shù)[輸入]類型的參數(shù)需要轉(zhuǎn)換
如果只有一個(gè)參數(shù)需要轉(zhuǎn)換,簡(jiǎn)單的使用宏 ConvertToUnicode(x)就行了。如果有多個(gè)參數(shù)要轉(zhuǎn)換,可以像下面這樣:
#if defined ARX2007 && !defined _UNICODE
wchar_t xx1[MAX_LEN];
wchar_t xx2[MAX_LEN];
...
wcscpy( xx1, ConvertToUnicode( param1 ) );
...

dosomething( xx1, .., xx2, ... ); //使用轉(zhuǎn)換后的字符串做參數(shù)
#else
dosomething( param1, .., param2, ... ); //保持原來的寫法不變
#endif

2. ARX接口函數(shù)[返回值]或[用于返回的參數(shù)]里包含字符串
這種情況不能直接使用ConvertToAnsi(x)宏,而要在代碼中視具體情況使用條件編譯。

3. 派生自ARX里的導(dǎo)出類,基類的虛函數(shù)有參數(shù)或返回值類型是字符串
由于是重載虛函數(shù),函數(shù)聲明須一致,這種情況已經(jīng)不能使用字符串轉(zhuǎn)換了,ARX 2007導(dǎo)出的類成員的字符串類型參數(shù)返回值等都是寬字節(jié),只能在程序中使用條件編譯,在不同編譯條件下產(chǎn)生不同的接口重載。

4. 使用或派生自AutoCAD提供的界面控件類,LPCREATESTRUCT結(jié)構(gòu)的問題。
MFC提供的派生自CWnd的類,有很多統(tǒng)一的接口和數(shù)據(jù)結(jié)構(gòu)。其中的一些會(huì)自動(dòng)適應(yīng)多字節(jié)方式和寬字符編譯方式,如創(chuàng)建窗體用的結(jié)構(gòu)LPCREATESTRUCT:

#ifdef UNICODE
typedef CREATESTRUCTW CREATESTRUCT;
typedef LPCREATESTRUCTW LPCREATESTRUCT;
#else
typedef CREATESTRUCTA CREATESTRUCT;
typedef LPCREATESTRUCTA LPCREATESTRUCT;
#endif // UNICODE

ARX 2007提供的界面控件類中,使用該結(jié)構(gòu)時(shí),都是采用如下形式:
int CAcUiDockControlBar::OnCreate(LPCREATESTRUCT lpCreateStruct) 
即ARX 2007的頭文件里,聲明接口時(shí)用的是LPCREATESTRUCT,如果采用Unicode方式編譯,它會(huì)被解釋成LPCREATESTRUCTW;如果采用多字節(jié)方式編譯,它就是LPCREATESTRUCTA。ARX 2007采用Unicode方式編譯的,對(duì)應(yīng)的lib文件內(nèi)導(dǎo)出的接口函數(shù)參數(shù)類型是LPCREATESTRUCTW。

我們程序如APArxInterface里有類UeDockControlBar派生自CAcUiDockControlBar,重載使用了類似LPCREATESTRUCT這樣的能自適應(yīng)字符串編譯方式的MFC定義的數(shù)據(jù)結(jié)構(gòu)的接口時(shí),因我們不使用Unicode方式編譯,又要適應(yīng)以后的Unicode方式編譯,所以需要對(duì)ARX 2007的頭文件添加條件編譯,且需要在我們代碼里重載的地方做條件編譯。

為了方便以后查找那些ARX的頭文件被修改過,在修改過的頭文件中都用#pragma message ("")在編譯時(shí)做提示:
used ARX2007 and unused UNICODE mode pragma project, some change has done in this file for ANSI->UNICODE convert
修改過的ARX 2007頭文件有:
[aduiBaseDialog.h]
[aduidock.h]
[acuiDialog.h]

5. ON_WM_CREATE()消息映射宏
該宏在MFC頭文件 afxmsg_.h 中定義:
// Message map tables for Windows messages
#define ON_WM_CREATE() /
{ WM_CREATE, 0, 0, 0, AfxSig_is, /
(AFX_PMSG) (AFX_PMSGW) /
(static_cast< int (AFX_MSG_CALL CWnd::*)(LPCREATESTRUCT) > ( &ThisClass :: OnCreate)) },
從該定義中可以看到引起問題的還是LPCREATESTRUCT結(jié)構(gòu)。

這個(gè)問題的代表是APArxInterface/Src/UeDockControlBar.cpp文件里的消息映射部分,編譯時(shí)會(huì)產(chǎn)生如下錯(cuò)誤提示:
../Src/UeDockControlBar.cpp(27) : error C2440: 'static_cast' : cannot convert from 'int (__thiscall 
UeDockControlBar::* )(LPCREATESTRUCTW)' to 'int (__thiscall CWnd::* )(LPCREATESTRUCT)'
Cast from base to derived requires dynamic_cast or static_cast

使用條件編譯定義新的消息映射宏
ON_WM_CREATE_ARX2007()替換該文件中的ON_WM_CREATE():
// UeDockControlBar
#if defined ARX2007 && !defined _UNICODE
#define ON_WM_CREATE_ARX2007() /
{ WM_CREATE, 0, 0, 0, AfxSig_is, /
(AFX_PMSG) (AFX_PMSGW) /
(static_cast< int (AFX_MSG_CALL CWnd::*)(LPCREATESTRUCTW) > ( &ThisClass :: OnCreate)) },
#else
#define ON_WM_CREATE_ARX2007() ON_WN_CREATE()
#endif

五、對(duì)"字符串轉(zhuǎn)換"的總結(jié)
1. 因?yàn)槲覀兊某绦蚴褂枚嘧止?jié)方式編譯,ObjectARX 2007使用寬字節(jié)方式編譯,所以需要進(jìn)行"字符串轉(zhuǎn)換"。
2. 字符串轉(zhuǎn)換只是臨時(shí)的做法,它不影響軟件的其它版本在普通多字節(jié)方式或Unicode方式的編譯。
3. 只對(duì)ARX接口需要的地方做轉(zhuǎn)換和條件編譯,程序中已定義的變量類型和代碼寫法不改變。
4. "字符串轉(zhuǎn)換"和讓程序支持Unicode是不同的概念,否則就是方案1了。

 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
在VC6.0下設(shè)置Unicode編譯環(huán)境
VC中unicode項(xiàng)目向多字節(jié)字符集項(xiàng)目移植
VS環(huán)境下MFC程序出現(xiàn)的問題
簡(jiǎn)析MinGW編譯器以及vc使用wxWidgets的漢字問題
關(guān)于C++程序的編碼問題
關(guān)于C程序的字符編碼問題
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服