ページの先頭行へ戻る
Interstage Application Server アプリケーション作成ガイド(CORBAサービス編)

2.2.3 Windows(R)アプリケーションに関する注意事項

  Windows Server(R) for Itanium-based Systems向けのアプリケーションをMicrosoft(R) Visual Studio(R)を使用して開発する場合、サーバ製品に含まれるインクルードファイル及びライブラリファイルをMicrosoft(R) Visual Studio(R)がインストールされた開発環境にコピーして開発を行います。
  C:\Interstageにインストールした場合は、以下のパスについてフォルダごとコピーします。

C:\Interstage\ODWIN\INCLUDE
C:\Interstage\ODWIN\LIB\IA64


(1) コンパイル時のオプションについて

(a) コンパイルに関する設定

  コンパイルを実行する場合は、以下のオプションを設定してください。

  Microsoft(R) Visual C++(R) .NETまたはMicrosoft(R) Visual Studio(R)の場合:

  [プロジェクト]-[プロパティ]-[構成プロパティ]-[C/C++] から、以下の表に示すオプションを設定してください。

カテゴリ

項目

設定値(32bit)

設定値(64bit)

コード生成

構造体メンバのアライメント

4 バイト

8 バイト

使用するランタイム

マルチスレッド(DLL)

最適化

  

デフォルトを推奨

プリプロセッサ

プリプロセッサの定義

"OM_PC","OM_WIN32_BUILD",
"__STDC__" を追加  (1)

言語

wchar_t をビルトイン型として扱う

いいえ

詳細

呼び出し規約

_cdecl

1)
   "__STDC__"を設定することにより、Microsoft拡張機能を前提とする処理でコンパイルエラーが発生する場合があります。この場合、CORBAアプリケーション用の処理とMicrosoft拡張機能を前提とする処理のソースを分けて、Microsoft拡張機能を前提とする処理のソースの先頭に「#undef __STDC__」を追加する対処を行ってください。

  Microsoft Platform SDK for Windows Server 2003の場合:

  以下のオプションを追加してください。
    /D "OM_PC" /D "OM_WIN32_BUILD" /D "__STDC__" /MD /Zp8


(b) リンクに関する設定

  ライブラリのリンク設定は、以下から行ってください。

  Microsoft(R) Visual C++(R) .NETまたはMicrosoft(R) Visual Studio(R)の場合:

  [プロジェクト]-[プロパティ]- [構成プロパティ]-[リンカ]-[入力]

  Microsoft Platform SDK for Windows Server 2003の場合:

  /LIBPATH:オプションで指定してください。

  リンクするライブラリについては、“提供プログラム”の“CORBAサービスの提供プログラム”-“B.1.2 ライブラリ”を参照してください。

  またVisual C++(R)の場合、[ツール]-[オプション]-[ディレクトリ]の「インクルード」、「ライブラリ」にそれぞれインストールフォルダの下の"INCLUDE"、"LIB"フォルダを登録してください。


登録例)


(2) コンパイル時に発生するエラーについて

(a) コンパイル時のエラー

  Microsoft(R) Visual Studio(R)を使用してC++アプリケーションのコンパイルを実施した場合、以下のようなエラーメッセージが表示され、コンパイルに失敗する場合があります。

  error C4980: '__value' : このキーワードを使用するには、/clr:oldSyntax コマンド ライン オプションが必要です

  このような場合、IDLファイルの変数名を変更する必要があります。上記の例の場合は、IDLファイルにおいて変数名が“value”となっている変数を別名に変更してください。
  以下に変更例を示します。

  
・修正前のIDLファイル
module ODsample{
    interface intf{
        readonly attribute long value;
        ・・・
    };
};
・修正後のIDLファイル
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)で以下のような設定を行い、再度コンパイルを実行してください。

  Microsoft(R) Visual C++(R) .NETまたはMicrosoft(R) Visual Studio(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)で以下のような手順で表に示すプリプロセッサの定義を設定してください。

  Microsoft(R) Visual C++(R) .NETまたはMicrosoft(R) Visual Studio(R)の場合:

  [プロジェクト]-[プロパティ]- [構成プロパティ]-[C/C++]-[プリプロセッサ]-[プロセッサの定義]

言語

DLL作成/リンク

プリプロセッサ定義

C

DLL作成時

"OM_USRDLL_MAKE"

C

DLLリンク時

"OM_USRDLL_LINK"

C++

スケルトンDLL作成時  (1)

"OM_SKDLL_MAKE"

C++

スケルトンDLLリンク時

"OM_SKDLL_LINK"

C++

スタブDLL作成時  (2)

"OM_STDLL_MAKE"

C++

スタブ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) リンクするライブラリについて

  一つのアプリケーションには、サーバ用ライブラリかクライアント用ライブラリのいずれかのライブラリのみリンクしてください。