CCW によるネイティブ COBOL からの .NET クラスの呼び出し

CCW (COM callable-wrapper; COM 呼び出し可能ラッパー) は、COM 相互運用機能の 1 つです。CCW でマネージ コードを COM オブジェクトとしてラップすると、ネイティブ コードから、他の COM オブジェクトと同様に呼び出すことができます。

CCW (COM callable-wrapper; COM 呼び出し可能ラッパー) は、COM 相互運用機能の 1 つです。CCW でマネージ コードを COM オブジェクトとしてラップすると、ネイティブ コードから、他の COM オブジェクトと同様に呼び出すことができます。つまり、あらゆる言語の .NET マネージ クラスが COM インターフェイスとして公開されます。詳しい背景情報については、Visual Studio のヘルプの「COM 呼び出し可能ラッパー」を参照してください。

.NET クラスを COM オブジェクトとして公開するには、クラスが COM 相互運用機能に登録されるように、プロジェクトを構成する必要があります。プロジェクトをビルドするとこのクラスが登録されて、ネイティブ COBOL 側で利用できるようになります。

.NET クラス内で定義および実装されたすべてのパブリック メソッドが、COM インターフェイスとして公開されます。COM クライアント アプリケーションは、これらのメソッドを、COM オブジェクトのメソッドであるかのように呼び出すことができます。

ネイティブ COBOL から .NET クラスを呼び出すには

  1. Visual Studio で、公開する .NET クラスを含むプロジェクトを開きます。[ファイル > 開く > プロジェクト] をクリックして、そのプロジェクトを参照します。
  2. [プロジェクト > myProject のプロパティ] をクリックします。
  3. [COBOL] タブで、[Advanced] をクリックし、[COM 相互運用機能用に登録] をオンにします。

    この操作によって、.NET クラスの COM プログラム用 ID を使用して、他の COM オブジェクトと同様に、ネイティブ クライアントから .NET クラス内のメソッドを呼び出しできます。この ID は、DefaultNamespace.Class として定義します。DefaultNamespace (デフォルトの名前空間) は、プロジェクト プロパティの [Application] タブで定義します。デフォルトではプロジェクト名に設定されます。

    たとえば、ネイティブ COBOL クライアントから ManagedCOM という .NET クラスを呼び出すには、次のように指定します。

    class ManagedCOM as "$OLE$COMDemo.ManagedCOM"

公開された .NET クラスをネイティブ COBOL から呼び出すには

ネイティブ COBOL から .NET クラスを COM オブジェクトであるかのように呼び出すには、次の要素をコードに追加します。

  1. プログラムにチェッカー指令 OOCTRL(+P) を設定します。
    $SET OOCTRL(+P)

    このチェッカー指令によって、ランタイム システムでは、COBOL データ型から COM データ型へマップすることができます。

  2. CLASS-CONTROL 段落で各 COM クラスを OO COBOL プロキシ クラスにマップします。COM クラスに OO COBOL クラス名を付けます。また、次の形式の文を使用して、COM ドメインであることを指定します。
    class-name IS CLASS "$OLE$windows-registry-name"

    windows-registry-name には次のどちらかを指定します。

    • サーバーのプログラム ID
    • サーバーのクラス ID

    プログラム ID とクラス ID は Windows レジストリで定義されています。

  3. OO COBOL COM クラスのインスタンスを作成します。

    OO COBOL プロキ シクラスにメッセージ "new" を送信します。COM サーバーが起動していない場合は、起動します。COM サーバーにメッセージを送信する際に使用できる OO COBOL ハンドルが返されます。

  4. COM サーバーにメッセージを送信します。
  5. プロパティを設定する場合はプロパティ名の前に「Set」を追加し、プロパティを取得する場合は「Get」を追加して、プロパティを呼び出します。

    プロパティを設定する場合は、単一のパラメーターを渡します。プロパティを取得する場合は、RETURNING パラメーターとして値が返されます。