MIDL を使用して x86 と x64 の両方のコードを生成するにはどうすればよいですか?
Visual Studio 2010 で IDL ファイルを作成しました。製品を x86 モードでコンパイルし、その後 x64 でコンパイルすると、IDL ファイルを「タッチ」して、x64 に関連するコードを再生成する必要があります。両方のコードを同じファイルに生成するように MIDL に指示することはできますか?
MIDL を使用して x86 と x64 の両方のコードを生成するにはどうすればよいですか?
Visual Studio 2010 で IDL ファイルを作成しました。製品を x86 モードでコンパイルし、その後 x64 でコンパイルすると、IDL ファイルを「タッチ」して、x64 に関連するコードを再生成する必要があります。両方のコードを同じファイルに生成するように MIDL に指示することはできますか?
これは古い質問であることは知っていますが、他の誰かがここでこれを打った場合、私はそれをどのように解決しましたか.
IDL ファイルを含むプロジェクトで、このような MIDL 出力ファイルを削除するすべてのプラットフォームと構成にビルド前イベントを追加しました...
if exist $(ProjectName).h del $(ProjectName).h
if exist $(ProjectName)_i.c del $(ProjectName)_i.c
if exist $(ProjectName)_p.c del $(ProjectName)_p.c
プロキシ (_p) ファイルは唯一のプラットフォーム固有の MIDL 生成ファイルであるため、削除するだけで済みます。
プロキシ スタブ ソース ファイルの名前または拡張子が異なる場合は、それらを使用してください。
Generated Files フォルダーの下のファイルを参照している場合、変更するのがターゲット プラットフォームだけの場合は変更されません (プラットフォーム固有の定義を使用する IDL に #ifdef ブロックを配置しない限り)。 . MIDL の出力はソース コードであり、バイナリではありません。生成されたコードで使用されるデータ型の名前は変更されないため、コンパイラが対象としているマシン アーキテクチャが異なっていても、MIDL からの出力は同じになります。
これは、XXX_i.h および XXX_i.c ファイルのコピーを作成し、プラットフォーム間で比較することで確認できます。これを行うには、ファイルをビルドし、コピーを作成し、再ビルドしてから比較します。異なるのはタイムスタンプだけです。
では、元の質問に戻りましょう。あなたはすでにそれを実行しています!
IDL ファイルはインターフェイスを定義し、そのインターフェイスは 64 ビット プラットフォーム機能または 32 ビット プラットフォーム機能を使用できます。IDL を使用してスタブを生成できます。インターフェイスに 32 ビット プラットフォーム固有の定義または 64 ビット プラットフォーム固有の定義がない場合は、おそらくスタブ上に生成できます (つまり、1 つの IDL ファイル)。ただし、それは公開しているインターフェイスによって異なります。簡単な答え: 32 ビットと 64 ビットの互換性を持つようにインターフェイスを定義する場合、2 つの異なる IDL ファイルは必要ありません。それ以外の場合は、2 つの異なる IDL ファイルが必要です。
「タッチ」(通常、ファイルの日付/時刻を更新することを意味し、ソフトウェアエンジニアリングに関して)が何を意味するのかを知らなければ、何をする必要があるかを具体的に言うのは困難です。