13

更新: Microsoft へのサポート コールを開いてからわずか 6 か月後に拒否され、彼らはそれがバグではないと主張しました (ドキュメントには、見られた動作が正しいものではないと明示的に記載されていないため)。彼らはDCRを拒否し、過去 10 年間苦情を聞いていないため、これは明らかに一般的な使用例ではないと述べました。

これは呼びかけです。同じ問題が発生した場合は、Microsoft にサポート コールを開いて、問題を修正する必要があることを Microsoft に知らせてください。Chrome のソース コードでこのコメントを見つけたので、少なくとも誰かが同じ問題に遭遇したことを知っています。

#.idl ファイルの構築。
#これは完全な混乱です。MIDL は $OPEN_DIR から実行する必要があり
#ます。そのインクルード パスを "ui/ie/bla.idl" のような相対パスに適用するのは愚かすぎるためです
#(現在のディレクトリのみを検索します)。
#したがって、相対インクルード パスと出力ファイルを修正するには、フープをジャンプする必要があります。


元の質問:

次のファイル構造があります。

  • C:\first\Foo.idl
  • C:\second\Bar.idl

Bar.idl次の行が含まれています。

import "first/Foo.idl";

からコンパイルするときにmidlをコンパイルするにはどうすればよいですか?Bar.idlC:\second

Foo.idl直接インポートした場合(指定せずにfirst/) first、追加のインクルード ディレクトリとして指定するだけで十分です ( midl /I c:\first Bar.idl)。Foo.idl

C:\または、 ( )からコンパイルした場合midl second\Bar.idlも問題ありません。

問題はC:\second、コマンド ラインを使用して内部からコンパイルするとmidl /I C:\ Bar.idl、次のコンパイル エラーが発生することです。

c1 : 致命的なエラー C1083: ソース ファイルを開けません: 'first\Foo.idl': そのようなファイルまたはディレクトリはありません

midlは、指定された追加のインクルード ディレクトリのいずれかではなく、現在のディレクトリに相対する場合にのみ相対パスを検索し、追加のインクルード ディレクトリを修飾されていないファイル名にのみ使用する場合にのみ、相対パスを検索するように見えます。この動作はimportキーワードに固有です。結果を使用includeすることは期待どおりです。

ローカル マシンにファイルがある場合はmidlがそのバージョンを取得し、それ以外の場合はサーバーからファイルを取得するように、2 つの異なる追加のインクルード ディレクトリを追加できるようにしたいと考えています (そのためchdir、ルート フォルダーへの ing はオプションではありません)。 )。

これを回避する方法はありますか?

4

3 に答える 3

2

ご指摘のとおり、これはばかげていますが、Microsoft サポートはこれがバグではないことを確認しています。考えられる回避策は次のとおりです。

1. /I スイッチを使用します。多くの。

/Iスイッチを使用してと の両方c:\firstを指定し、代わりに相対パスc:\secondを指定します。import "Foo.idl"

コマンドラインが長くなりすぎる場合は、応答ファイルを指定してください。

2. シンボリック リンクを使用する

インクルード ディレクトリへのシンボリック リンクまたはジャンクションを使用して、それらすべてを既知のディレクトリの下の単一の階層で参照します。次に、そのディレクトリへの相対パスを使用できます。

シンボリック リンクを維持するために、ビルド前の手順が使用される場合があります。

MKLINK.exe は、ジャンクションまたはシンボリック リンクを作成できます。

3.追加のビルドステップを使用する

必要なファイルを既知の場所にコピーする追加のビルド ステップを作成し、そこからインポートします。

于 2012-06-16T10:17:28.560 に答える