IDLファイルとインクルードファイルは、以下のように別々にIDLコンパイルを行います。
インクルードファイルを含む複数のIDLファイルでのIDLコンパイラの実行結果について、下図に示します。
注意事項
IDLコンパイラはインクルードファイルの構文解析も行っており、構文上のエラーやIDLファイルの記述との衝突チェックも行います。そのためインクルードファイルに構文上の問題がある場合は前もって修正する必要があります。
-noincludeオプションを-Rまたは-aオプションと併用(インタフェースリポジトリに登録)する場合、IDLコンパイラはインクルードファイルに記述された識別子がインタフェースリポジトリに登録されているかチェックを行います。そのため、インクルードファイルはすでにインタフェースリポジトリに登録されていなければなりません。
-noincludeと-update,-deleteは併用できません。このためIDLファイルの情報を変更する場合は、“-R -delete”で定義情報をインタフェースリポジトリからいったん削除し、再度、変更した情報を-R,-aで登録します。このとき、インクルードファイルの情報も削除されるため、先にインクルードファイルの情報を-R,-aにより登録する必要があります。
IDLコンパイラで-noincludeオプションを指定して生成したソースファイルを、Visual C++(R)でコンパイルを実行すると、「xxxx : error LNK2001: 外部シンボル "_xxxxx" は未解決です」のようなエラーメッセージが表示される場合があります。このような場合は、IDLコンパイラに-noincludeオプションを指定せずにソースファイルを生成し、リンクオプションに/FORCEオプションを追加して、再度コンパイルを実行してください。この時、Visual C++(R)でプログラム全体の最適化なしを指定してください。
エラーの原因と対処
-noincludeオプションを指定した場合にIDLコンパイラから表示されるエラーメッセージ、その原因および対処を以下に示します。
1 | 現象 | “identifier redeclaration of ...”のエラーが発生します。 |
原因 | 1.IDLファイルの定義とインクルードファイルの定義が衝突しています。 | |
対処 | 1.衝突する定義を避けるため、識別子の名前を変更するなどの修正を行います。 | |
2 | 現象 | -R等指定時に“XXX is not installed.”のエラーが発生します。 |
原因 | インクルードファイルの定義がインタフェースリポジトリに登録されていません。 | |
対処 | インクルードファイルを、前もってインタフェースリポジトリに登録しておきます。 | |
3 | 現象 | その他の構文エラーが発生します。 |
原因 | IDL構文上の問題があります。 | |
対処 | メッセージに該当するIDLの定義を修正します。 |