2011-07-07 4 views
3

私は、VistaとXPで動作する最初のリリースがWindows 7のみの大規模なC++プロジェクトを変更しています。C++コードで使用されるWin32 APIのバージョンを判別するためのツールですか?

主な仕事は、GetProcAddressを実行時に使用するW7 API呼び出しを変更することです(他のプラットフォームでは利用できないメソッドとの静的なリンクを避けるため)。どの呼び出しを変更する必要があるのか​​を確認するのに役立ちます。うまくいけば、C++コード自体を調べてください。

これに失敗した場合、古いWindows SDKに対してプロジェクトを構築するのが最善でしょうか? - 例:Windows XPは、コンパイル・エラーが発生しますよりも新しいhttp://www.microsoft.com/download/en/details.aspx?displaylang=en&id=6510

答えて

5
#define WINVER 0x501 

今すぐすべて。

エラーが発生したものは、何も残らないまですべて置き換えてください。

あなたには、いくつかのsed -fuを持っている場合、あなたはおそらく、直接のウィンドウヘッダーですべて#if WINVER > 0x501ブロックを見つけたが、私にとっては、これは私が希望

+0

これは正しいトラックで私を得ました。 WINVERは推奨されていません - この記事で説明されているように、新しい公式な方法はNTDDI_VERSIONです。http://msdn.microsoft.com/en-us/library/aa383745.aspx - しかし、あなたの方法は機能しますとても分かりました) - ありがとう! –

+0

WINDはいつNTDDI_VERSIONの代わりに非難されましたか?それがVista/7の変更だった場合は、それを元に戻す必要があるかもしれません。 :P – ssube

+0

@peachykeen:WINVERを定義してもSDKには何の違いもないようだから、とにかくそれは私の印象でした。 (私はWin7の呼び出しから何のエラーもありません) –

2

:-)ビット私の範囲外であるフィルタを書くことができますWinXPおよびVistaのdepends.exeツール(VSインストールのいずれかまたはhere)を使用してバイナリを開き、これらのOSで静的にリンクできない機能を確認します。これらはバイナリが使用している機能ですが、OSの古いリリースでは欠けています。あなたは何とかそれらに対処する必要があります:自分で実装するか、別のものに置き換えるか、あなたのアプリの機能のいくつかを無効にします。

+0

ありがとう - 私はそれについて考えましたが、私は本当にソースレベルの情報を望んでいました。 –

関連する問題