4

MIDL を使用して x86 と x64 の両方のコードを生成するにはどうすればよいですか?

Visual Studio 2010 で IDL ファイルを作成しました。製品を x86 モードでコンパイルし、その後 x64 でコンパイルすると、IDL ファイルを「タッチ」して、x64 に関連するコードを再生成する必要があります。両方のコードを同じファイルに生成するように MIDL に指示することはできますか?

4

3 に答える 3

0

これは古い質問であることは知っていますが、他の誰かがここでこれを打った場合、私はそれをどのように解決しましたか.

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 生成ファイルであるため、削除するだけで済みます。

プロキシ スタブ ソース ファイルの名前または拡張子が異なる場合は、それらを使用してください。

于 2016-02-04T15:21:32.363 に答える
0

Generated Files フォルダーの下のファイルを参照している場合、変更するのがターゲット プラットフォームだけの場合は変更されません (プラットフォーム固有の定義を使用する IDL に #ifdef ブロックを配置しない限り)。 . MIDL の出力はソース コードであり、バイナリではありません。生成されたコードで使用されるデータ型の名前は変更されないため、コンパイラが対象としているマシン アーキテクチャが異なっていても、MIDL からの出力は同じになります。

これは、XXX_i.h および XXX_i.c ファイルのコピーを作成し、プラットフォーム間で比較することで確認できます。これを行うには、ファイルをビルドし、コピーを作成し、再ビルドしてから比較します。異なるのはタイムスタンプだけです。

では、元の質問に戻りましょう。あなたはすでにそれを実行しています!

于 2012-09-06T17:18:15.563 に答える
0

IDL ファイルはインターフェイスを定義し、そのインターフェイスは 64 ビット プラットフォーム機能または 32 ビット プラットフォーム機能を使用できます。IDL を使用してスタブを生成できます。インターフェイスに 32 ビット プラットフォーム固有の定義または 64 ビット プラットフォーム固有の定義がない場合は、おそらくスタブ上に生成できます (つまり、1 つの IDL ファイル)。ただし、それは公開しているインターフェイスによって異なります。簡単な答え: 32 ビットと 64 ビットの互換性を持つようにインターフェイスを定義する場合、2 つの異なる IDL ファイルは必要ありません。それ以外の場合は、2 つの異なる IDL ファイルが必要です。

「タッチ」(通常、ファイルの日付/時刻を更新することを意味し、ソフトウェアエンジニアリングに関して)が何を意味するのかを知らなければ、何をする必要があるかを具体的に言うのは困難です。

于 2012-09-04T18:16:26.933 に答える