[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ] [ DOC Home ]

# C クックブックの例:
OpenVMSでのサンプル・アプリケーションの作成

注意
  `SAMPLE1` と`DISPATCH_SAMPLE1` は，Microsoft Pressが出版しているDale Rogerson 著『Inside COM』から抜粋したものです。

# C.1 COMの例(サンプル1)

このサンプルでは，COMクライアントとサーバを実装します。コンポーネントは `IX` と`IY` という2つのインタフェースを提供します。 また，クライアントはコンポーネントに対して3番目のインタフェース `IZ` を問い合わせていますが，これはコンポーネントが提供していないインタフェースです。

このサンプルでは，2つのOpenVMSシステム間の接続，2つのWindows NTシステム間の接続，OpenVMS システムとWindows NTシステムの間の接続を示しています。

注意
  OpenVMSでアプリケーションを作成する前に，NTA$LOGON を実行し，Windows NT資格情報を取得する必要があります。詳細については，第12.2節を参照してください。

## C.1.1 OpenVMSでの手順

ここでは，OpenVMSシステムでアプリケーションを構築する方法について説明します。

### C.1.1.1 OpenVMSでのアプリケーションの構築

ファイルを`DCOM` examplesディレクトリからローカル・ディレクトリにコピーします。 次の例を参照してください。

            $ set default mydisk:[mydirectory]
            $ copy dcom$examples:[sample1]*.* []

アプリケーションを構築するには，次のコマンド・プロシージャを実行します。

            $ @build_sample1

MMSがある場合は，次に示すように，インクルードされた説明ファイルを使用できます。

            $  MMS/DESCRIPTION=BUILD_SAMPLE1.MMS

`BUILD` ファイルは，プロセス内サーバとプロセス外サーバの両方を構築し， 登録します。

### C.1.1.2 OpenVMSでのアプリケーションの登録

ビルド・プロシージャは，`CMPNT$SHR.EXE` と`CMPNT.EXE` の両方を自動的に登録します。コンポーネントを手動で登録するには， 次の操作を行います。

- プロセス内サーバを登録するには，`REGSVR32` ユーティリティを使用します。 次の例を参照してください。

             $ regsvr32 :== $DCOM$REGSVR32.EXE
             $ regsvr32 path-nameCMPNT$SHR.EXE

- プロセス内サーバの登録を解除するには， `REGSVR32` ユーティリティを使用します。次の例を参照してください。

             $ regsvr32 /u path-nameCMPNT$SHR.EXE

- プロセス外サーバを登録するには，次の操作を行います。

             $ cmpnt :== $path-nameCMPNT.EXE
             $ cmpnt /regserver

- プロセス外サーバの登録を解除するには，次の操作を行います。

             $ cmpnt /unregserver

- プロキシ・スタブを登録するには，`REGSVR32` ユーティリティを使用します。 次の例を参照してください。

             $ regsvr32 path-namePROXY$SHR.EXE

- プロキシ・スタブの登録を解除するには， `REGSVR32` ユーティリティを使用します。次の例を参照してください。

             $  regsvr32 /u path-namePROXY$SHR.EXE

### C.1.1.3 プロセス外サーバとしてのOpenVMS でのアプリケーションの実行

コンポーネントがプロセス外サーバであるサンプルを実行するには， `CMPNT.EXE` を実行します。コンポーネントから `Server: Waiting` というメッセージが表示されたら，クライアントを別のウィンドウまたは端末セッションで実行します。

- ウィンドウ(または端末セッション) 1:

              $ run cmpnt

- ウィンドウ(または端末セッション) 2:

              $ client :== $path-nameCLIENT.EXE
              For OutProc:
              $ client
              2
              $

クライアントは次のメッセージを表示します。

           To which server do you want to connect?
            1) In-Process Server
            2) Out-of-Process Server
            :

`2` と入力して，プロセス外サーバを選択します。

### C.1.1.4 OpenVMSでのアプリケーションの実行とリモート・ サーバの指定

リモート・マシン(またはサーバ・システム)として指定したシステムで `CMPNT.EXE` を実行します。リモート・システムはWindows NTシステムでもかまいません。コンポーネントから`Server: Waiting` メッセージが返された場合は，ローカル・マシン(またはクライアント・ システム)として指定したシステムでクライアントを実行します。 次の例を参照してください。

            $ client :== $path-nameCLIENT.EXE
            $ client remote-system-name
            2
            $

クライアントは次のメッセージを表示します。

           To which server do you want to connect?
            1) In-Process Server
            2) Out-of-Process Server
            :

`2` と入力して，リモート・サーバ，つまりプロセス外サーバの実行を選択します。

### C.1.1.5 プロセス内サーバとしてのOpenVMS でのアプリケーションの実行

コンポーネントがプロセス内サーバであるサンプルを実行するには，クライアントだけを実行します。 次の例を参照してください。

            For InProc:
            $ client
            1
            $

クライアントは次のメッセージを表示します。

           To which server do you want to connect?
            1) In-Process Server
            2) Out-of-Process Server
            :

`1` と入力して，プロセス内サーバを選択します。

## C.1.2 Windows NTの場合の手順

ここでは，Windows NTシステムでアプリケーションを構築する方法について説明します。

### C.1.2.1 Windows NTでのアプリケーションの構築

`README-SAMPLE1.TXT` ファイルと次のファイルをCOM examplesディレクトリからWindows NTシステムにコピーします。

         CLIENT.CXX
         CMPNT.CXX
         CMPNT.DEF
         GUIDS.CXX
         MAKE-ONE.
         MAKEFILE.BAT
         PROXY.DEF
         REGISTRY.CXX
         REGISTRY.H
         SERVER.IDL

`MAKEFILE.BAT` ファイルを使用して，サンプルを構築します。 次の例を参照してください。

            > MAKEFILE

Makefileはプロセス内サーバとプロセス外サーバの両方を構築し，登録します。

### C.1.2.2 Windows NTでのアプリケーションの登録

ビルド・プロシージャ`make-one` は`CMPNT.DLL`， `PROXY.DLL`，`CMPNT.EXE` を自動的に登録します。次の例を参照してください。

            regsvr32 -s Cmpnt.dll
            regsvr32 -s Proxy.dll
            Cmpnt /RegServer

アプリケーションの登録を解除するには，次のコマンドを入力します。

            regsvr32 -u Cmpnt.dll
            regsvr32 -u Proxy.dll
            Cmpnt /UnRegServer

### C.1.2.3 Windows NTでのアプリケーションの実行

`CLIENT` を実行します。OpenVMSでイン・プロセス・ サーバとしてアプリケーションを実行する手順(第C.1.1.5項)， およびプロセス外サーバとしてアプリケーションを実行する手順( 第C.1.1.3項)と同じ手順を実行します。

リモート・マシンの名前(UNCまたはDNS)を引数として使用して，リモート・ マシンでオブジェクトのインスタンスを作成します。次の例を参照してください。

            >Client hostname        ! point the client at the remote system
            2                       ! means outproc invocation
            >

# C.2 オートメーションの例(Dispatch_Sample1)

この例では，デュアル・インタフェースとしてオートメーション・コンポーネント・ サーバを実装します。この例には，ディスク・インタフェースを介してデュアル・ インタフェースに接続する`Dclient` と，`IUnknown` インタフェース(v-tableを使用)を介して接続するCOM クライアント実装である`Client` の2つのクライアントがあります。

このサンプルでは，2つのOpenVMSシステムの間の接続，2つのWindows NT システムの間の接続，OpenVMSシステムとWindows NTシステムの間の接続を示します。

## C.2.1 OpenVMSの場合の手順

ここでは，OpenVMSシステムでアプリケーションを構築する方法について説明します。

### C.2.1.1 OpenVMSでのアプリケーションの構築

ファイルを`DCOM` examplesディレクトリからローカル・ディレクトリにコピーします。 次の例を参照してください。

            $ set default mydisk:[mydirectory]
            $ copy dcom$examples:[dispatch_sample1]*.* []

アプリケーションを構築するには，次のコマンド・プロシージャを実行します。

            $ @build_dispatch_sample1

MMSがある場合は，次の例に示すように，インクルードされた説明ファイルを使用できます。

            $  MMS/DESCRIPTION=BUILD_DISPATCH_SAMPLE1.MMS

`BUILD` ファイルはプロセス内サーバとプロセス外サーバの両方を構築し， 登録します。

### C.2.1.2 OpenVMSでのアプリケーションの登録

ビルド・プロシージャは`CMPNT$SHR.EXE` と`CMPNT.EXE` の両方を自動的に登録します。コンポーネントを手動で登録するには， 次の操作を行います。

- プロセス内サーバを登録するには，`REGSVR32` ユーティリティを使用します。 次の例を参照してください。

             $ regsvr32 :== $DCOM$REGSVR32.EXE
             $ regsvr32 path-nameCMPNT$SHR.EXE

- プロセス内サーバの登録を解除するには， `REGSVR32` ユーティリティを使用します。次の例を参照してください。

             $ regsvr32 /u path-nameCMPNT$SHR.EXE

- プロセス外サーバを登録するには，次の操作を行います。

             $ cmpnt :== $path-nameCMPNT.EXE
             $ cmpnt /regserver

- プロセス外サーバの登録を解除するには，次の操作を行います。

             $ cmpnt /unregserver

### C.2.1.3 プロセス外サーバとしてのOpenVMS でのアプリケーションの実行

コンポーネントがプロセス外サーバであるサンプルを実行するには， `CMPNT.EXE` を実行します。

コンポーネントから`Server: Waiting` メッセージが表示されたら， 別のウィンドウまたは端末セッションでクライアントを実行します。

- ウィンドウ(または端末セッション) 1:

              $ run cmpnt

- ウィンドウ(または端末セッション) 2:

  - ディスパッチ・クライアントの場合:

                $ run dclient

  - COMクライアントの場合:

                $ run client

クライアントは次のメッセージを表示します。

           To which server do you want to connect?
            1) In-Process Server
            2) Out-of-Process Server
            :

`2` と入力して，プロセス外サーバを選択します。

### C.2.1.4 OpenVMSでのアプリケーションの実行とリモート・ サーバの指定

リモート・マシン(またはサーバ・システム)として指定したシステムで `CMPNT.EXE` を実行します。リモート・システムはWindows NTシステムでもかまいません。`Server: Waiting` メッセージがコンポーネントから表示されたら， ローカル・マシン(またはクライアント・ システム)として指定したシステムでクライアントを実行します。 次の例を参照してください。

COMクライアントを使用するには，次のように入力します。

            $ client :== $path-nameCLIENT.EXE
            $ client remote-system-name
           To which server do you want to connect?
            1) In-Process Server
            2) Out-of-Process Server
            :

`2` と入力して，リモート・サーバ実行，つまりサーバ外プロセスを選択します。

### C.2.1.5 プロセス内サーバとしてのOpenVMS でのアプリケーションの実行

コンポーネントがプロセス内サーバであるサンプルを実行するには，クライアントだけを実行します。 次の例を参照してください。

- ディスパッチ・クライアントの場合:

              $ run dclient

- COMクライアントの場合:

              $ run client

クライアントは次のメッセージを表示します。

           To which server do you want to connect?
            1) In-Process Server
            2) Out-of-Process Server
            :

`1` と入力して，プロセス内サーバを選択します。

## C.2.2 Windows NTの場合の手順

ここでは，Windows NTシステムでアプリケーションを構築する方法について説明します。

### C.2.2.1 Windows NTでのアプリケーションの構築

`README-DISPATCH-SAMPLE1.TXT` ファイルと次のファイルをCOM examples ディレクトリからWindows NTシステムにコピーします。

         CLIENT.CXX
         DCLIENT.CXX
         CMPNT.CXX
         CMPNT.DEF
         MAKE-ONE.
         MAKEFILE.BAT
         REGISTRY.CXX
         REGISTRY.H
         SERVER.IDL

`MAKEFILE.BAT` ファイルを使用してサンプルを構築します。 次の例を参照してください。

            C:> MAKEFILE

Makefileはプロセス内サーバとプロセス外サーバの両方を構築し，登録します。

### C.2.2.2 Windows NTでのアプリケーションの登録

ビルド・プロシージャ`make-one` は`CMPNT.DLL`， `PROXY.DLL`，`CMPNT.EXE` を自動的に登録します。次の例を参照してください。

            regsvr32 -s Cmpnt.dll
            Cmpnt /RegServer

アプリケーションの登録を解除するには，次のコマンドを入力します。

            regsvr32 -u Cmpnt.dll
            Cmpnt /UnRegServer

### C.2.2.3 Windows NTでのアプリケーションの実行

`DCLIENT` または`CLIENT` を実行します。 OpenVMSでプロセス内サーバとしてアプリケーションを実行する手順(第C.2.1.5項)， およびプロセス外サーバとして実行する手順( 第C.2.1.3 項)と同じ手順を実行します。

リモート・マシンの名前(UNCまたはDNS)を引数として使用して，リモート・ マシンでオブジェクトのインスタンスを作成します。

[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ] [ DOC Home ]