freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

vc6轉(zhuǎn)到換高版本的問(wèn)題及解決方法(編輯修改稿)

2025-07-04 13:38 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 39。LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)39。None of the functions with this name in scope match the target type以上兩個(gè)編譯錯(cuò)誤產(chǎn)生是因?yàn)樾屡f版本的MFC 中對(duì)ON_MESSAGE消息映射宏定義不同引起的,先看看老版本的MFC的ON_MESSAGE消息宏定義:define ON_MESSAGE(message, memberFxn) \{ message, 0, 0, 0, AfxSig_lwl, \(AFX_PMSG)(AFX_PMSGW)(LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM))amp。memberFxn },再看看新版本的ON_MESSAGE定義:define ON_MESSAGE(message, memberFxn) \{ message, 0, 0, 0, AfxSig_lwl, \(AFX_PMSG)(AFX_PMSGW) \(static_cast LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM) \(memberFxn)) },注意,函數(shù)類型沒(méi)有變化,都是:LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM)。類型的函數(shù)指針(CWnd以及派生類的類成員函數(shù)指針),區(qū)別之處是新的ON_MESSAGE宏使用C++的 static_cast 操作符代替了C類型的強(qiáng)制轉(zhuǎn)換。產(chǎn)生這兩個(gè)錯(cuò)誤其實(shí)是因?yàn)橛脩魶](méi)有按照ON_MESSAGE宏的約定聲明和定義消息響應(yīng)函數(shù)造成的,比如,對(duì)于某些不需要處理返回值的消息響應(yīng)函數(shù),用戶通常這樣聲明和定義消息響應(yīng)函數(shù):在頭文件中聲明:afx_msg void OnFileProcess(WPARAM wParam,LPARAM lParam)。在源文件中實(shí)現(xiàn):void CCrpFileOpavDlg::OnFileProcess(WPARAM wParam, LPARAM lParam){.......}或者更過(guò)分一些,直接指定為實(shí)際參數(shù)類型:在頭文件中聲明:afx_msg void OnFileProcess(LPCTSTR lpszMessage, int nPercent)。在源文件中實(shí)現(xiàn):void CCrpFileOpavDlg::OnFileProcess(LPCTSTR lpszMessage, int nPercent){.......}舊版本的ON_MESSAGE使用了C類型的強(qiáng)制轉(zhuǎn)換,宏解開(kāi)后的代碼后不會(huì)產(chǎn)生錯(cuò)誤信息,但是改成對(duì)類型檢查很嚴(yán)格的static_cast 操作符時(shí)就出問(wèn)題了,因?yàn)橥ú贿^(guò)static_cast 操作符的檢查。解決方法就是修改代碼,同時(shí)吸取教訓(xùn),普遍使用的方法并不一定就能約定俗成,一切還是要按照規(guī)矩來(lái)。錯(cuò)誤現(xiàn)象之三:f:\project\.....\(74) : error C2440: 39。static_cast39。 : cannot convert from 39。UINT (__thiscall CWzButton::* )(CPoint)39。 to 39。LRESULT (__thiscall CWnd::* )(CPoint)39。Cast from base to derived requires dynamic_cast or static_cast出現(xiàn)這個(gè)錯(cuò)誤的原因可是“人力不可抗拒”之原因造成的,因?yàn)榕f版本的 ON_WM_NCHITTEST 宏使用了UINT (__thiscall CWzButton::* )(CPoint)。類型的類成員函數(shù)指針,其定義如下:define ON_WM_NCHITTEST() \{ WM_NCHITTEST, 0, 0, 0, AfxSig_wp, \(AFX_PMSG)(AFX_PMSGW)(UINT (AFX_MSG_CALL CWnd::*)(CPoint))amp。OnNcHitTest },但是新版本變成了:define ON_WM_NCHITTEST() \{ WM_NCHITTEST, 0, 0, 0, AfxSig_l_p, \(AFX_PMSG)(AFX_PMSGW) \(static_cast LRESULT (AFX_MSG_CALL CWnd::*)(CPoint) (amp。ThisClass :: OnNcHitTest)) },注意返回值類型由UINT改成了LRESULT,再加上static_cast的嚴(yán)格檢查,所以就出錯(cuò)了。修改的方法就是將你的OnNcHitTest函數(shù)由:afx_msg UINT OnNcHitTest(CPoint point)。改成:afx_msg LRESULT OnNcHitTest(CPoint point)。不必太在意,這個(gè)不是你的錯(cuò),不過(guò),如果你要維護(hù)一個(gè)老的界面庫(kù)(通常很多控件的subclass都會(huì)用到ON_WM_NCHITTEST),改起來(lái)還是很痛苦地,不扯了,繼續(xù)下一個(gè)。七、 和 的廢棄(obsolete)問(wèn)題在編譯老的ATL向?qū)傻拇a時(shí),會(huì)遇到下面的編譯輸出: is obsolete. Please remove it from your project. is obsolete. Please remove it from your project.:ifdef _ATL_STATIC_REGISTRYinclude include endifinclude 根據(jù)提示刪除include 和include 兩行代碼就行了,不過(guò)更好的辦法是這樣改:ifdef _ATL_STATIC_REGISTRYinclude if _MSC_VER = 1200 // MFC or earlierinclude endifendifif _MSC_VER = 1200 // MFC or earlierinclude endif八、新的C++編譯器不再支持默認(rèn)類型的變量定義錯(cuò)誤現(xiàn)象是:f:\project\.....\(464) : error C4430: missing type specifier int assumed. Note: C++ does not support defaultint產(chǎn)生這個(gè)錯(cuò)誤的原因是程序中出現(xiàn)了這樣的代碼:const some_const_var = 10。或static some_static_bool = FALSE。新的C++編譯器嚴(yán)格按照C++標(biāo)準(zhǔn),不再支持默認(rèn)類型的變量定義方式,必須嚴(yán)格指定變量類型,如下使用:const int some_const_var = 10?;騭tatic BOOL some_static_bool = FALSE。九、for 語(yǔ)句的變量作用域問(wèn)題考察下面的代碼:for(int i = 0。 i 120。 i++){if(something_happen){break。}.............}if(i 120){//something happen}在VC6的編譯器中,這樣的代碼是沒(méi)有問(wèn)題的,因?yàn)閂C6的編譯器為了兼容舊的Microsoft C/C++編譯器,沒(méi)有嚴(yán)格按照C++標(biāo)準(zhǔn)執(zhí)行,但是從VC7開(kāi)始,VC的編譯器開(kāi)始遵守C++標(biāo)準(zhǔn),所以就會(huì)出現(xiàn)“變量i沒(méi)有定義的錯(cuò)誤”。解決的方法也很簡(jiǎn)單,按照J(rèn)im Hyslop 和 Herb Sutter的經(jīng)典對(duì)話系列的第四篇中的方法,改成如下就可以了:int i。for(i = 0。 i 120。 i++)十、字符串函數(shù)的返回值問(wèn)題strchr(_tcschr)、strpbrk(_tcspbrk ??)、strrchr(_tcsrchr)和strstr(_tcsstr)這四個(gè)函數(shù)在VC6的CRT庫(kù)中定義的返回值都是char *(TCHAR *),所以以前的代碼通常是這樣使用的:TCHAR *cp = _tcschr( pszPath, _T(39。\\39。) )。//使用*cp,可以通過(guò)cp指針修改pszPath的內(nèi)容這其實(shí)是一個(gè)“漏洞”,因?yàn)槿绻鹥szPath是const char(TCHAR) *字符串,那么就表示它不希望修改字符串的內(nèi)容,但是調(diào)用strchr(_tcschr)函數(shù)后就可以通過(guò)cp指針
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)教案相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1