(1) コンパイル時のオプションについて
(a) コンパイルに関する設定
コンパイルを実行する場合は、以下のオプションを設定してください。
[プロジェクト]-[プロパティ]-[構成プロパティ]-[C/C++] から、以下の表に示すオプションを設定してください。
カテゴリ | 項目 | 設定値(32bit) | 設定値(64bit) |
---|---|---|---|
コード生成 | 構造体メンバのアライメント | 4 バイト | 8 バイト |
使用するランタイム | マルチスレッド(DLL) | ||
最適化 |
| デフォルトを推奨 | |
プリプロセッサ | プリプロセッサの定義 | "OM_PC","OM_WIN32_BUILD", | |
言語 | wchar_t をビルトイン型として扱う | いいえ | |
詳細 | 呼び出し規約 | _cdecl |
注1)
"__STDC__"を設定することにより、Microsoft拡張機能を前提とする処理でコンパイルエラーが発生することがあります。この場合、CORBAアプリケーション用の処理とMicrosoft拡張機能を前提とする処理のソースを分けて、Microsoft拡張機能を前提とする処理のソースの先頭に「#undef __STDC__」を追加して対処してください。
(b) リンクに関する設定
ライブラリのリンク設定は、以下から行ってください。
[プロジェクト]-[プロパティ]- [構成プロパティ]-[リンカ]-[入力]
リンクするライブラリについては、“提供プログラム”の“CORBAサービスの提供プログラム”-“B.1.2 ライブラリ”を参照してください。
また、Visual C++(R)の場合は、[ツール]-[オプション]-[ディレクトリ]の「インクルード」、「ライブラリ」にそれぞれインストールフォルダの下の"INCLUDE"、"LIB"フォルダを登録してください。
登録例)
インクルードファイル
C:\MSDEV\INCLUDE;C:\MSDEV\MFC\INCLUDE;C:\Interstage\ODWIN\INCLUDE;
C:\Interstage\TD\INCLUDE;C:\Interstage\ots\INCLUDE;
C:\Interstage\ESWIN\INCLUDE
(Visual C++(R)およびInterstageを、それぞれC:\MSDEVおよびC:\Interstageにインストールした場合)
ライブラリファイル
C:\MSDEV\LIB;C:\MSDEV\MFC\LIB;C:\Interstage\ots\LIB;
C:\Interstage\ODWIN\LIB;C:\Interstage\EXTP\LIB;C:\Interstage\TD\LIB;
C:\Interstage\ESWIN\LIB
(Visual C++(R)およびInterstageを、それぞれC:\MSDEVおよびC:\Interstageにインストールした場合)
(2) コンパイル時に発生するエラーについて
(a) コンパイル時のエラー
Microsoft(R) Visual Studio(R)を使用してC++アプリケーションのコンパイルを行った場合、以下のようなエラーメッセージが表示され、コンパイルに失敗することがあります。
error C4980: '__value' : このキーワードを使用するには、/clr:oldSyntax コマンド ライン オプションが必要です
この場合、IDLファイルの変数名を変更する必要があります。上記の例の場合は、IDLファイルにおいて変数名が“value”となっている変数を別名に変更してください。
変更例を以下に示します。
例
module ODsample{ interface intf{ readonly attribute long value; ・・・ }; };
module ODsample{ interface intf{ readonly attribute long value1; /* value -> value1 */ ・・・ }; };
(b) リンク時のエラー
ODSV.LIB/ODWIN.LIBを使用して、Visual C++(R)でコンパイルを実行すると、以下のようなエラーメッセージが表示されることがあります。
リンク中... odsv.lib(ODSV.dll) : error LNK2005: _CORBA_sequence_string_allocはすでにsimple_skel.objで定義されています。 odsv.lib(ODSV.dll) : warning LNK4006: _CORBA_sequence_string_allocはsimple_skel.objで定義されています。2つ目以降の定義は無視されます。
この場合、Visual C++(R)で以下のように設定し、再度コンパイルを実行してください。
[プロジェクト]-[プロパティ]- [構成プロパティ]-[リンカ]-[コマンドライン]-[追加のオプション]に、/FORCEオプションを追加します。
また、C++マッピングの場合、以下のラーメッセージが表示されることがありますが、本メッセージは問題ありません。
リンク中... LINK : warning LNK4103: 削除するデストラクタ "public: virtual void * __thiscall CORBA::Object::`vector deleting destructor'(unsigned int)" のインポートです; イメージは正しく動作しない可能性があります
(3) アプリケーションのDLL化について
Visual C++(R)で、IDLコンパイラから生成されたファイルを使用してDLLを作成する方法について説明します。
(a) IDLコンパイル
DLL作成用のソースを生成する場合は、IDLコンパイル時に-dyオプションを指定してIDLコンパイルを行ってください。
(b) プリプロセッサの定義
DLL作成時およびDLLリンク時に、Visual C++(R)で以下のような手順で表に示すプリプロセッサの定義を設定してください。
[プロジェクト]-[プロパティ]- [構成プロパティ]-[C/C++]-[プリプロセッサ]-[プロセッサの定義]
言語 | DLL作成/リンク | プリプロセッサ定義 |
---|---|---|
C | DLL作成時 | "OM_USRDLL_MAKE" |
DLLリンク時 | "OM_USRDLL_LINK" | |
C++ | スケルトンDLL作成時 (注1) | "OM_SKDLL_MAKE" |
スケルトンDLLリンク時 | "OM_SKDLL_LINK" | |
スタブDLL作成時 (注2) | "OM_STDLL_MAKE" | |
スタブDLLリンク時 | "OM_STDLL_LINK" |
注1)スケルトンファイルおよびメソッド実装部からDLLを作成する場合
注2)スタブファイルからDLLを作成する場合
(c) 注意事項
上記のようにプロジェクトの設定でプリプロセッサを定義する方法の他に、IDLコンパイラ生成ヘッダファイル(*.h)をインクルードするソースファイルで、#define文を使用して指定することもできます。
複数のIDLファイルから生成されたヘッダファイルを使用してDLLのリンクと作成を両方行う場合の例を以下に示します。
#define OM_USRDLL_LINK #include "a.h" // IDLコンパイラ生成ヘッダ #undef OM_USRDLL_LINK #define OM_USRDLL_MAKE #include "b.h" // IDLコンパイラ生成ヘッダ #undef OM_USRDLL_MAKE // 以下ソースコード ...
(4) リンクするライブラリについて
一つのアプリケーションには、サーバ用ライブラリかクライアント用ライブラリのどちらか一方のライブラリをリンクしてください。