3

2台のマシンがあります。1台はVistaUltimate32を実行し、もう1台はXPSP3を実行しています。両方のマシンに同じVS2008バージョンがインストールされています。
私は最初のマシン(vista)でブースト1.50.0を構築し、その後、ブーストに依存するlibtorrentライブラリを構築しました。
いくつかのlibtorrentビルド命令で、winバージョンがプリプロセッサ内で指定されていることを確認したので、現時点で意味があると思われることを実行しました。

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

ビルドは正常に完了し、そのマシンでアプリケーションを実行できました。ただし、もう一方(XP)で実行しようとすると、次のようなメッセージが表示されて失敗しました。

プロシージャエントリポイントSetFileInformationByHandleがダイナミックリンクライブラリKERNEL32.dllに見つかりませんでした

さて、論理的には、これは互換性のないバージョンと関係があると推測しています。この変数が異なる値で存在する場合、おそらく異なるWindowsヘッダーが含まれます。

要件:これをVistaまたは7で構築し、それでもXPで実行できるようにしたい。
質問:このディレクティブは必要ですか?必要な場合、値はどうなりますか?何かが足りない場合、他に何を指定する必要がありますか?

4

1 に答える 1

1

XPでプログラムをビルドするか、 (コメントのように)に設定_WIN32_WINNTしてみてください。0x0501このレポートkernel32.dllによると、ライブラリは下位バイナリ互換性があるため、このライブラリの古いバージョン (5.0) でプログラムをビルドし、再コンパイルする必要なく新しいバージョン (6.0) で実行できます。一連の追加されたシンボル (はその 1 つ) のため、その逆は不可能です。SetFileInformationByHandle

于 2012-08-09T16:20:19.267 に答える