3

我有兩臺機器,一臺運行Vista Ultimate 32,另一臺運行XP SP3。兩臺機器都安裝了相同的VS2008版本。
我在第一臺機器上(vista)建立了boost 1.50.0,後來依賴boost的libtorrent庫。
我在勝利版本預處理程序中指定的一些libtorrent構建指令所看到的,所以我做了什麼,此刻似乎是有道理的:Windows版本預處理器和構建向後兼容性?

#define _WIN32_WINNT=0x0600 // being that the current OS is Vista 

構建了臺,我是能夠運行應用程序在那臺機器上。然而,當我試圖在另一個(XP)運行它,它失敗的消息,像:

程序的入口點SetFileInformationByHandle不能設在動態鏈接庫KERNEL32.dll

現在,邏輯上,我猜測這與不兼容的版本有關,並且當此變量存在不同的值時,可能會包含不同的Windows標頭。

要求:我想建立在Vista或7上,並仍然能夠在XP上運行它。
問題:我是否需要這個指令,如果我這樣做,應該有什麼價值?我還應該指定什麼,如果我錯過了什麼?

+0

我在猜測一般的答案是:如果我想在向新的Windows(如7)構建時向後兼容,我應該簡單地指定需要支持的版本的值;例如_WIN32_WINNT = 0x0501,如果需要支持XP沒有SP ...它應該在每個版本> 0x501時自動工作。這很簡單嗎? – Less 2012-08-09 15:36:27

回答

1

嘗試在XP上構建程序或將_WIN32_WINNT設置爲0x0501(如您的評論中所述)。根據this reportkernel32.dll庫是向後二進制兼容的,因此您可以使用舊版本的庫(5.0)構建程序,並使用新版本(6.0)運行它,而無需重新編譯。反之亦然是不可能的,因爲一堆附加符號(SetFileInformationByHandle就是其中之一)。