vc6中向vs2010遷移的幾個問題


 

vc6版本支持的庫編譯:CJ60lib

1. 用vs2010打開CJ60庫的源碼的dsw,強制打開

  (1)設置項目屬性的語言

  因為,如果代碼字符的編碼集不一樣,則會出現函數沖定義,參數沖突等問題,這可以通過修改項目屬性可以修改。

  因為VS2010默認示寬字符,所以,編譯要從VC6(默認窄字符),要修改項目屬性為不使用寬字符。

2. 編譯:項目,方式如下:

  

(1)“編譯”,出現一下問題:

     

  定位文件,做一下修改

 

(2)再次build only

  2.1

  warning C4819: 該文件包含不能在當前代碼頁(936)中表示的字符。請將該文件保存為 Unicode 格式以防止數據丟失

      雙擊提示,打開文件,然后保存即可

 

   2.2

  error C2065: “p”: 未聲明的標識符

  error C2065: “i”: 未聲明的標識符

  是因為vs2010更遵守C++標准,臨時變量已經修正,需要把for(),以及if()括號中的局部變量,調制for或者if之前定義即可。

  

 2.3

  error C4430: 缺少類型說明符 - 假定為 int。注意: C++ 不支持默認 int

  添加 int 的類型

  

2.4

  一大堆的重定義問題,如下:

   error C2011: “tagSFBS_FLAGS”:“enum”類型重定義

  這是因為, shlapi.h中的代碼被重新定義了,ATL在定義前會判斷一下是否已經定義,而CJLIB庫則沒有判定,所以,只需要針對CJlib庫源文件中的shlwapi.h包含注釋掉。,一共有兩處:

  D:\TOOL3RDPART\CJ60源碼\著名界面庫cj60lib的源程序\Include\ModulVer.h(12):#include <shlwapi.h>
  D:\TOOL3RDPART\CJ60源碼\著名界面庫cj60lib的源程序\Include\ShellTree.h(11):#include <Shlwapi.h>

  只需要再引用出,將該文件注釋掉  

//#include <Shlwapi.h>

  

  經過上述步驟的解決,則問題解決了一大部分:

2.5

  1>d:\tool3rdpart\cj60源碼\著名界面庫cj60lib的源程序\cj60lib\cjcontrolbar.cpp(155): error C2440: “static_cast”: 無法從“UINT (__thiscall CCJControlBar::* )(CPoint)”轉換為“LRESULT (__thiscall CWnd::* )(CPoint)”從基類型到派生類型的強制轉換需要 dynamic_cast 或 static_cast

  定位到ON_WM_NCHITTEST(),即消息響應 函數返回值類型不匹配,這是因為VS2010以及VC6構造是不一樣的。應該把

  vc6的INT改為VS2010支持的LRESULT,因為打開問題消息響應,可以看到返回的類型是:

  定位問題的相應函數:

  

 

  

  在CJlib源碼中修改如下:

   

  主要有兩個文件:

  cj60lib\cjsizedockbar.cpp(89

  cj60lib\cjcontrolbar.cpp(155)

 2.6

  cjpagerctrl.cpp(75): error C2440: “static_cast”: 無法從“BOOL (__thiscall CCJPagerCtrl::* )(NMPGSCROLL *,LRESULT *)”轉換為“BOOL (__thiscall CCmdTarget::* )(NMHDR *,LRESULT *)”
1>          在匹配目標類型的范圍內沒有具有該名稱的函數

   可以看出,VC6支持的是參數類型:NMPGSCROLL,而VS2010支持的參數是NMHDR,所以可以在CJlib修改源文件如下,統一參數不一致的問題。

  

  修改為VS2010支持的類型:

  

   即要修改實現,又要修改聲明。

 解決以上問題,則可以輸出生成的dll文件

  如果以debug編譯,則輸出d(debug)版本的庫

    如果以release編譯,則輸出release版本。

  注意,release,同樣要修改項目屬性語言為:不支持款字符。

  

 

 

   

 

 

 

 

end;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM