從VC6 0轉到vs2008的一些問題

2021-06-03 15:30:51 字數 1721 閱讀 3766

今天照孫鑫的書寫了個自定義訊息函式,結果出錯(vs2008平台下),找了一下,發現問題所在,vs2008比vc6.0型別檢查更加嚴格!

1訊息對映

vs2005對訊息的檢查更為嚴格,以前在vc6下完全正常執行的訊息對映在vs2005下編譯不通過

a. on_message(message,onmymessage);

error c2440: 「static_cast」: 無法從「void (__thiscall cpppview::* )(wparam,lparam)」轉換為「lresult (__thiscall cwnd::* )(wparam,lparam)」

在匹配目標型別的範圍內沒有具有該名稱的函式

error c2440: 「static_cast」: 無法從「void (__thiscall cpppview::* )(void)」轉換為「lresult (__thiscall cwnd::* )(wparam,lparam)」

在匹配目標型別的範圍內沒有具有該名稱的函式

b. on_command_ex(id,onmymessage2);

在vs2005中,onmymessage返回值必須為bool,且含有乙個 uint 引數指出了命令id,其形式為:afx_msg bool onmymessage(uint);如果不符合,

error c2440: 「static_cast」: 無法從「bool (__thiscall cmainframe::* )(void)」轉換為「bool (__thiscall ccmdtarget::* )(uint)」

在匹配目標型別的範圍內沒有具有該名稱的函式

error c2440: 「static_cast」: 無法從「bool (__thiscall cmainframe::* )(void)」轉換為「bool (__thiscall ccmdtarget::* )(uint)」

在匹配目標型別的範圍內沒有具有該名稱的函式

2 字元處理

在c中廣泛使用的strcpy,strcat,strstr等等推薦使用更為安全的strcpy_s,strcat_s,strstr_s等來代替

3 數學函式檢查

vs2005中,數學函式的引數檢查更為嚴格,如pow(2, 45)會引起乙個錯誤提示如下:

error c2668: 「pow」: 對過載函式的呼叫不明確

d:\program files\microsoft visual studio 8\vc\include\math.h(575): 可能是「long double pow(long double,int)」

d:\program files\microsoft visual studio 8\vc\include\math.h(527): 或「float pow(float,int)」

d:\program files\microsoft visual studio 8\vc\include\math.h(489): 或「double pow(double,int)」

試圖匹配引數列表「(int, int)」時

正確的使用為pow(2.0, 45)

3 更加符合c++標準

如在vs6中,在for迴圈中的迴圈變數的定義的作用域延伸到迴圈體外,vs2005則修正了這樣的bug。

vc6:

for(int i=0;i<100;i++)f2(); 

for(i = 1;i<10;i++)f1(); 

//i已經定義

而有vs2005中,第二句的i必須重新定義。

vc6 0轉vs2008連線錯誤

把vc6.0的工程轉到vs2008後,編譯發現有連線錯誤。如下 1 cvtres fatal error cvt1100 duplicate resource.type manifest,name 1,language 0x0409 1 link fatal error lnk1123 failur...

VS2008與VC6 0的變化

1.messagebox vc 6.0 messagebox hello,world vs2008 messagebox l hello,world 或 messagebox text hello,world 2.combo box內容新增方法 vc 6.0 drop down list box c...

VS2008與VC6 0的變化

1.messagebox vc 6.0 messagebox hello,world vs2008 messagebox l hello,world 或 messagebox text hello,world 2.combo box內容新增方法 vc 6.0 drop down list box c...