2011-07-07 42 views
3

我正在修改其第一個版本爲Windows 7的大型C++項目 - 僅適用於Vista和XP。確定C++代碼使用的Win32 API版本的工具?

主要工作將是改變W7 API調用在運行時使用GetProcAddress(以避免靜態鏈接與其他平臺上不可用的方法),所以我想知道是否有任何工具可以幫助確定哪些調用需要更改 - 希望通過檢查C++代碼本身。

如果不這樣做,最好是嘗試針對較舊的Windows SDK構建項目? - 例如:http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=6510

回答

5
#define WINVER 0x501 

現在所有比Windows XP更新的東西都會導致編譯錯誤。

替換導致錯誤的所有內容,直到沒有任何內容爲止。

如果你有一些sed-FU,你也許可以寫一個過濾器,直接找到在Windows頭所有#if WINVER > 0x501塊,但對我來說,這是一個有點出我的範圍:-)

+0

讓我走上正軌; WINVER已棄用 - 正式的新辦法是NTDDI_VERSION,正如本文所述:http://msdn.microsoft.com/en-us/library/aa383745.aspx - 但是,你的方法會起作用(看來如此明顯) - 謝謝! –

+0

WINVER何時棄用NTDDI_VERSION?如果這是Vista/7更改,則可能還必須將其重新移回。 :P – ssube

+0

@peachykeen:這是我的印象,無論如何,自定義WINVER似乎沒有對SDK帶來任何改變。 (我沒有從Win7調用中發現錯誤。) –

2

我會在WinXP和Vista下使用depends.exe工具打開你的二進制文件(無論是從VS安裝還是從here),以查看在這些操作系統下哪些功能不能靜態鏈接。這些將是您的二進制文件正在使用的功能,但在舊版本的操作系統中缺少這些功能。您必須以某種方式處理它們:或者自行實施它們,將其替換爲其他內容或禁用應用程序的某些功能。

+0

謝謝 - 我想過,但我真的想要源代碼級別的信息。 –