日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

由VC2010与VC2017数据结构差异造成的程序错误

發(fā)布時(shí)間:2024/1/1 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 由VC2010与VC2017数据结构差异造成的程序错误 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

內(nèi)容:VC2010和VC2017的標(biāo)準(zhǔn)庫(kù)中,string(或wstring)的數(shù)據(jù)結(jié)構(gòu)和操作有所不同,所以在將這兩種數(shù)據(jù)作為參數(shù)在兩個(gè)系統(tǒng)產(chǎn)生的函數(shù)中傳遞時(shí)會(huì)出現(xiàn)亂碼(string和wstring在2017下必須是引用傳遞)

最近完成了VS207下Skia 32位庫(kù)的編譯,并將其運(yùn)用于基于VC2010的一個(gè)系統(tǒng)。在使用過(guò)程中出現(xiàn)的問(wèn)題有時(shí)莫名其妙。這里有一個(gè)例子值得記住:

例子1:其中的一個(gè)函數(shù)用于Skia繪制漢字:

CStringA fname = mFont.lfFaceName;
CStringA text = FHt[i];

m_pMarkLib->DrawTextL(pst, text, mFont.lfEscapement * 10.0, FSize.tmHeight, fname, cr);?

pst是屏幕坐標(biāo),text是要顯示的文字(CStringA),mFont.lfEscapement * 10.0是傾斜角,

FSize.tmHeight是字的大小,fname是字體名稱(CStringA),cr是顏色。

接下來(lái)DrawTextL調(diào)用兩個(gè)2017下動(dòng)態(tài)庫(kù)中的類CMarkShader類(對(duì)象是m_GShader)的成員函數(shù)

void CMklib::DrawTextL(CPoint pt, CString text, double angle, int size, CStringA fname, COLORREF rcolor)
{
CStringW wtext(text);
std::wstring str = wtext.GetBuffer();
wtext.ReleaseBuffer();
msPoint c;
c.X = pt.x;
c.Y = pt.y;
unsigned int color = m_GShader.RGBAToUInt(GetRValue(rcolor), GetGValue(rcolor), GetBValue(rcolor), 255);
std::string sfname = fname.GetBuffer();
fname.ReleaseBuffer();
m_GShader.setFont_c(sfname.c_str(), color, size);
//OutputDebugString("DrawTextL");
//OutputDebugStringW(str.c_str());
int len = str.length();
m_GShader.DrawStringW((void*)str.c_str(), len, pt.x, pt.y, size, angle, c);
}

這兩個(gè)函數(shù)分別是m_GShader.setFont_c 和m_GShader.DrawStringW。最初這兩個(gè)函數(shù)的第一個(gè)參數(shù)分別是std::string &和std::wstring&。此時(shí)兩個(gè)函數(shù)都會(huì)產(chǎn)生異常,DrawStringW函數(shù)畫出的漢字還是亂碼。經(jīng)過(guò)兩天的觀察和思考,發(fā)現(xiàn)原因是VC2010和VC2017的std::string?和std::wstring?實(shí)現(xiàn)有差異(這是我的猜測(cè))。因?yàn)橥瑯拥膕td::wstring數(shù)據(jù)在2010中能夠正常,作為參數(shù)進(jìn)入VC2017函數(shù)中就會(huì)成為亂碼。所以,我們參數(shù)改為直接將其內(nèi)存塊傳進(jìn)去,成功!

?

轉(zhuǎn)載于:https://www.cnblogs.com/myboat/p/9867041.html

總結(jié)

以上是生活随笔為你收集整理的由VC2010与VC2017数据结构差异造成的程序错误的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。