2016-06-01 28 views
1

問題があります。コンパイル時にWindowsのバージョンを検出する方法が見つかりません。C言語でOsバージョンを定義する

私の目的は、Interfaceに依存する実行可能ファイルを作成することです.Interfaceは、特定のバージョンのWindowsでのみ定義されています。

私の実行可能なクロスウィンドウ版を作成するには、特定のウィンドウバージョンのインクルードとコードの一部を定義できるようにします。

まず、コンパイル時に特定のウィンドウバージョンにインクルードすることは可能ですか?

第2に、そうでなければ、マルチウィンドウOS版のアプリケーションを設計する最良の方法は何ですか?バージョンごとに1つの実行可能ファイル?

ありがとう、お返事ありがとうございます。

+0

多分、私たちは疑問を回避することができます。たぶん、それらを解決する方法があります。 –

+1

コンパイル時になぜこれを判断したいのですか?すべてのバージョンのコードを含めることはできませんし、実行時に呼び出すコードを決定することはできませんか? – CodeCaster

+0

例:INetFwRule3で作業できるようにしたい場合、そのINetFwRule3はWindows 10でのみ定義されます。OSごとに1つのアプリケーション(.exe)にコードを記述したい – Destrif

答えて

2

本当にこれを有効にする必要があります。実行時にこれを解決する方が良いです。できること:

  • 実行するアクションを定義するインターフェイスを作成します。
  • 異なるプラットフォーム用に別々の実装を作成します(サンプルではWindows10Implementationクラスがあり、INetFwRule3を呼び出します)。
  • コード内でEnvironment.OSVersionを確認し、特定のプラットフォーム用の実装クラスを作成します。

個別のクラスライブラリで実装を分割することができますので、OS固有のものをロードする必要はありませんが、必要なときにのみロードできます。

+0

だから、インターフェイス固有の複数の.classを作成する必要がありますか?それ以外の場合、Visualはコンパイルされません:Windows 7のINETFWRule3を含む。Environment.OSVersionは実行時にあるためです。 – Destrif

+0

はい、別のクラスライブラリを作成する必要があります。 –

+0

しかし、INetFwRule3がWindows 7に存在しないため、Windows 10用のコードを含むライブラリはWindows 7でもコンパイルできません。これについてはまだ分かりません。私はここに同様の質問があります:http://stackoverflow.com/questions/37454774/visual-studio-compile-error-in-windows-7-when-required-interface-is-defined-only – alexandrudicu

0

実行中のアプリケーションから一部のソースコードのコンパイルをトリガーしますか?私はこれが可能であると想像することができます。その場合、あなたはEnvironment.OSVersion

しかし、より良いアプローチは次のようになりにOSのバージョンを見つけることができるはずです。

...すべてのバージョンのコードを含めると、実行時に呼び出すためにどのコードを決定します。

コメントでCodeCasterが提案しています。

関連する問題