成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

對于VS2003編譯器的BUG給予細致分析

開發 后端
假期就開始對VS2003編譯器開始學習,首先碰到的就是環境的配置。以前學的Visual Studio2003,但并沒有怎么用。所以有一個星期的時間基本是在用實踐著。

最新的VS2003編譯器,是一個很通用的數據庫管理程序,到目前為止所有的代碼都是通過Visual Studio編寫,核心部分的設計基本完成,但愿可以通過.NET開發一些小的模塊,Visual Studio的程序員真的沒有多少精英啊。我們必須要用VS2003編譯器下的C++代碼升級到VS2005編譯器下,從而可以充分利用.NET與C++混合編程。

升級的基本過程如下:

1、首先備份現有的VC程序,備份之后啟動VS2005。

2、通過VS2005打開要升級的解決方案,系統提示自動轉換,如果VC程序已經被嵌入到VSS中,則系統將提示登錄VSS,并且自動將解決方案文件和項目文件簽出。(注意選擇備份原來版本 的解決方案的選項。)

3、一般情況下系統提示成功,可能會有兩個警告,可以不予理會。因為升級過程中僅僅修改了解決方案文件和工程項目文件,所以速度會很快,C++頭文件和CPP文件都不作任何修改(這和VB6到VB2005的升級不同),因此速度很快。#t#

4、在VS2005中重新編譯升級后的程序,很可能出現很多警告和錯誤提示,警告可以不予理會,錯誤提示必須修改。我所遇到的錯誤提示主要有兩種:一種提示是“某個變量沒有定義”,另外一種是模板類的消息映射的錯誤提示。

先說第一種錯誤提示,例如如下的兩個for循環語句

  1. for(int i=0;i<10;i++)  
  2. {  
  3. }  
  4. for(i=0;i<100;i++)//  

上面的語句在VS2003中沒有問題,在2005中則是錯誤的,2005將i作為第一個for循環中的局部變量處理,因此編譯器認為第二個for循環中的i沒有定義。這類錯誤可能有很多,但是修改起來比較容易。

第二種錯誤是模板類的消息映射宏錯誤。我在程序中設計了一個控件模板:

  1. #define UNI_FORMVIEW_CONTROLS(P) \  
  2. typedef CUniDataCtrl<CEdit,P> MEDICONEXPORT CUniEdit; \  
  3. typedef CUniDataCtrl<CEditAddress,P> MEDICONEXPORT CUniAddress; \  
  4. typedef CUniDataCtrl<CComboBoxData,P> MEDICONEXPORT  CUniComboBox; \  
  5. UNI_FORMVIEW_CONTROLS(CMdcLayerPanel)  

并通過typedef定義了很多VS2003編譯器類型(20多個)

  1. #define Map(T,B) \  
  2. BEGIN_MESSAGE_MAP(T, B)\  
  3. ON_WM_LBUTTONDOWN()\  
  4. ON_WM_RBUTTONDOWN()\  
  5. ON_WM_MOUSEMOVE()\  
  6. ON_WM_SETCURSOR()\  
  7. ON_WM_SETFOCUS()\  
  8. ON_WM_KILLFOCUS()\  
  9. ON_REGISTERED_MESSAGE(BCGM_PROPERTY_CHANGED,OnPropertyChange)\  
  10. END_MESSAGE_MAP()  
  11. #define MSG_MAP_UNI_EDIT Map(CUniEdit,CEdit)   
  12. #define MSG_MAP_UNI_ADDRESS Map(CUniAddress,CEditAddress)   
  13. #define MSG_MAP_UNI_COMBOBOX Map(CUniComboBox,CComboBoxData)   
  14. #define MSG_MAP_UNI_DATETIMECTRL Map(CUniDateTimeCtrl,CMyDateTimeCtrl)   
  15. #define MSG_MAP_UNI_CHECKCOMBOBOX Map(CUniCheckComboBox,CCheckComboBox)   
  16. #define MSG_MAP_UNI_ALL \  
  17. MSG_MAP_UNI_EDIT \  
  18. MSG_MAP_UNI_ADDRESS \  
  19. MSG_MAP_UNI_COMBOBOX \  
  20. MSG_MAP_UNI_DATETIMECTRL \  
  21. MSG_MAP_UNI_CHECKCOMBOBOX \  

最后,我在一個CPP文件中直接調用 MSG_MAP_UNI_ALL 既完成了宏的消息映射的定義。但是這種方式在VS2005中無法編譯通過,最后我不得不在模板類的頭文件中增加了如下的一個消息映射宏:

  1. #define BEGIN_TEMPLATE_MESSAGE_MAP_EX(theClass, 
    type_name1,type_name2,  baseClass)  
  2. PTM_WARNING_DISABLE  
  3. template < typename type_name1,typename type_name2 > 
  4. const AFX_MSGMAP* theClass< type_name1 ,type_name2 >
    GetMessageMap() const  
  5. {  
  6. return GetThisMessageMap();   
  7. }  
  8. template < typename type_name1 ,typename type_name2> 
  9. const AFX_MSGMAP* PASCAL theClass
    < type_name1 ,type_name2  >GetThisMessageMap()  
  10. {  
  11. typedef theClass< type_name1 ,type_name2  > ThisClass;  
  12. typedef baseClass TheBaseClass; 

上述的模板類消息映射宏我是參考BEGIN_TEMPLATE_MESSAGE_MAP(theClass, type_name, baseClass)編寫的,該宏只支持一個模板參數,而我定義的模板中需要兩個模板參數,因此,我自己擴充VS2003編譯器一下。關于BEGIN_TEMPLATE_MESSAGE_MAP的幫助在MSDN中好像沒有,在afxwin.h中定義了:

責任編輯:chenqingxiang 來源: sfcyyc的專欄
相關推薦

2009-12-01 15:01:33

VS2003 Web

2009-11-30 10:34:28

VS2003編譯

2009-11-30 09:10:40

VS2003斷點無效

2009-11-30 13:51:28

2009-11-26 14:10:08

2009-11-30 11:05:19

VS2003 WebS

2009-11-30 16:50:26

VS2003調試

2009-11-30 17:28:39

VS2003 ASP

2009-12-01 15:32:48

VS2003配置

2009-12-01 17:55:11

VS2003配置

2009-11-25 13:35:05

VS2003使用

2009-11-27 10:03:48

VS2003安裝失敗

2009-11-27 16:25:54

2009-11-30 13:51:28

VS2003 Acti

2009-11-30 13:51:28

ActiveX控件

2009-11-25 10:00:48

VS2003系統

2009-11-30 10:51:17

VS2003無法啟動調

2009-11-27 16:16:51

VS2003系統

2009-11-26 11:05:59

VS2003控件

2009-12-16 10:15:58

VS2003編譯
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91精品国产综合久久久久久 | 超碰成人免费 | 一级欧美视频 | 天天草天天操 | 做a视频| 国产精品第2页 | 久久久久久成人 | 亚洲福利 | 久久久久久成人 | 777zyz色资源站在线观看 | 精品国产伦一区二区三区观看说明 | 人人种亚洲 | 中文字幕97| 拍真实国产伦偷精品 | 视频1区2区 | 成人在线视频观看 | 国产福利91精品一区二区三区 | 日韩一区中文字幕 | 国产一区二区三区在线 | 成人精品一区二区户外勾搭野战 | 精品国产18久久久久久二百 | 中文字幕 亚洲一区 | 成人精品在线观看 | 欧美亚洲日本 | 国产亚洲精品久久久久久豆腐 | 亚洲欧美精品在线观看 | 在线观看国产www | 亚洲日韩视频 | 在线中文字幕日韩 | 欧美日韩高清一区 | 日韩精品视频一区二区三区 | 国产日韩欧美中文字幕 | 搞黄网站在线观看 | 久久久久久亚洲 | 狠狠爱网址 | 日韩精品久久久 | 欧美精品在线一区 | 男人视频网站 | 久久网一区二区三区 | 国产免费a视频 | 亚洲综合在 |