更新: Microsoft へのサポート コールを開いてからわずか 6 か月後に拒否され、彼らはそれがバグではないと主張しました (ドキュメントには、見られた動作が正しいものではないと明示的に記載されていないため)。彼らはDCRを拒否し、過去 10 年間苦情を聞いていないため、これは明らかに一般的な使用例ではないと述べました。
これは呼びかけです。同じ問題が発生した場合は、Microsoft にサポート コールを開いて、問題を修正する必要があることを Microsoft に知らせてください。Chrome のソース コードでこのコメントを見つけたので、少なくとも誰かが同じ問題に遭遇したことを知っています。
#.idl ファイルの構築。
#これは完全な混乱です。MIDL は $OPEN_DIR から実行する必要があり
#ます。そのインクルード パスを "ui/ie/bla.idl" のような相対パスに適用するのは愚かすぎるためです
#(現在のディレクトリのみを検索します)。
#したがって、相対インクルード パスと出力ファイルを修正するには、フープをジャンプする必要があります。
元の質問:
次のファイル構造があります。
C:\first\Foo.idlC:\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 はオプションではありません)。 )。
これを回避する方法はありますか?