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