從
vc6.0
平台級到
vs2008
平台最近在在把一些程式從
vc6遷移到
vs2008
,由此而關注到一些這方面的知識,找了一些資料,根據自己遇到的一些情況,結合在一起,整理出來這篇文章,希望對以後有這方面工作的人多一些參考,如果大家還有可很享的可以跟貼。。。。
提到這個問題是因為,這裡涉及到
winodws
版本的定義。關於版本定義的關鍵無外乎為程式標頭檔案中對於
#define winver
和#define _win32_winnt
的使用,具體為:
#define winver 0***xx
#define _win32_winnt 0***xx該定義一般用於標示程式對執行環境的要求,另外在某些標頭檔案中也有這樣的巨集定義。如果版本匹配的話就會在編譯的時候將這些內容編譯,否則就不編譯。
定義正確的
windows
版本,不僅關係到程式的正確編譯,同時也關係到程式的正確執行;在公升級的過程中,我就碰到了程式編譯正確但執行出錯的問題。
版本的定義關係到被編譯到程式中的內容,這裡主要是指系統提供的功能**。
windows
各個版本的功能雖然大差不差,但特定於某個系統功能還是存在的,於是關係到這些功能的
api**也就有所不一樣。當我們在程式中定義了錯誤的系統版本,被編譯程序式的內容便可能包含當前系統不支援的**片段,這樣的程式即使可能正確編譯通過,但在執行的時候,由於在當前系統中找不到相應的內容資源,從而發生錯誤。這一點熟悉動態鏈結庫
(dll)
的人都很清楚,其實該問題就是和系統動態鏈結庫有關。
考慮到我遷移程式的時候,是直接利用
vs2008
將vc6
程式轉化的方式,然後按
vs2008
新建專案的
stdafx.h
檔案內容更新了原來的
stdafx.h
標頭檔案,並新增了
vs2008
專案才有的
targerver.h
標頭檔案。
(工程轉換時,沒有
targerver.h
為我們生成,預設的
winver = 0x0600
的系統環境(這裡指明了系統為
vista
),所以要改變就要自己手動新增
targerver.h)
根據targetver.h
標頭檔案裡的下列定義:
#ifndef winver//指定要求的最低平台是
windows vista
。
#define winver 0x0600//將此值更改為相應的值,以適用於
windows
的其他版本。
#endif
#ifndef _win32_winnt//
指定要求的最低平台是
windows vista
。
#define _win32_winnt 0x0600//將此值更改為相應的值,以適用於
windows
的其他版本。
#endifps
:0×0500
表示windows 2000
,0×0501
為windows xp
,0×0502
為windows server 2003
,0×0600
為windows vista
。2
、關於dx8sdk
使用中link
時出現的
libci.lib
無法找到的問題
最近開發過程中碰到了用
dx8 sdk
編譯專案時,在
link
的時候,
無法開啟
libci.lib
的問題.
link:fatal error lnk1104:
無法開啟檔案
:libci.lib"
解決辦法如下:
選擇工程的屬性,在
linker
選項中選擇
command line ,
增加下面一行:
/nodefaultlib:libci
原因:出現在vc9中,
可能沒有選擇
「安裝舊的
iostream庫」.
導致這個問題
.在我看來
,還是微軟的問題
.
從VC6 0平台級到VS2008平台 之一
從vc6.0平台級到vs2008平台 最近在在把一些程式從vc6遷移到vs2008,由此而關注到一些這方面的知識,找了一些資料,根據自己遇到的一些情況,結合在一起,整理出來這篇文章,希望對以後有這方面工作的人多一些參考,如果大家還有可很享的可以跟貼。提到這個問題是因為,這裡涉及到winodws版本的...
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...