OpenVMS Alpha
オペレーティング・システム
コネクティビティ開発者ガイド


前へ 次へ 目次 索引


6.4.2 プロセス内コンポーネント共用可能イメージのリンク

プロセス内コンポーネント共用可能イメージの依存関係の一覧は,クライアント・イメージやコンポーネント実行可能イメージとは少し異なります。リンク時に発生する特定の依存関係は次のとおりです。

6.4.2.1 シンボル・ベクタの作成

プロセス内コンポーネント共用可能イメージをリンクするには,COM for OpenVMS が共用可能イメージ内で呼び出すエントリ・ポイントのシンボル・ベクタを作成しなければなりません。Win32 実行時環境では,DllMainエントリ・ポイントに対して標準命名規則が適用されます。次の要素を含まなければなりません。

たとえば,CMPNT$SHRという名前のコンポーネント共用可能イメージは,次のオプション・ファイルを使用してシンボル・ベクタを定義します。


! 
! The list of symbols exported by CMPNT$SHR.EXE. 
! 
SYMBOL_VECTOR=(- 
        _WindU_DllMain_CMPNT$/DllMain  = PROCEDURE,- 
        DllGetClassObject               = PROCEDURE,- 
        DllCanUnloadNow                 = PROCEDURE,- 
        DllRegisterServer               = PROCEDURE,- 
        DllUnregisterServer             = PROCEDURE) 

CMPNT_SHAREという名前のコンポーネント共用可能イメージは,次のオプション・ファイルを使用してシンボル・ベクタを定義します。


! 
! The list of symbols exported by CMPNT_SHARE.EXE. 
! 
SYMBOL_VECTOR=(- 
        _WindU_DllMain_CMPNT_SHARE/DllMain  = PROCEDURE,- 
        DllGetClassObject               = PROCEDURE,- 
        DllCanUnloadNow                 = PROCEDURE,- 
        DllRegisterServer               = PROCEDURE,- 
        DllUnregisterServer             = PROCEDURE) 

6.4.3 プロキシ/スタブ共用可能イメージのリンク

プロキシ/スタブ共用可能イメージの依存関係の一覧は,クライアントおよびコンポーネント実行可能イメージの依存関係とは少し異なります。リンク時に発生する特定の依存関係は次のとおりです。

6.4.3.1 シンボル・ベクタの作成

プロキシ/スタブ共用可能イメージのリンクでは,COM for OpenVMS が共用可能イメージ内で呼び出すエントリ・ポイントのシンボル・ベクタを作成しなければならないので,もう少し複雑になります。Win32 実行時環境では,DllMainエントリ・ポイントに対して標準の命名規則を適用しています。次の要素を含まなければなりません。

たとえば,PROXY$SHRという名前のプロキシ/スタブ共用可能イメージは,次のオプション・ファイルを使用してシンボル・ベクタを定義します。


! 
! RPC Shareable Image 
! 
SYS$LIBRARY:DCOM$RPCRT4_SHR.EXE/SHARE 
! 
! 
! The list of symbols exported by PROXY$SHR.EXE. 
! 
SYMBOL_VECTOR=(- 
        _Windu_DllMain_PROXY$/DllMain   = PROCEDURE,- 
        DllGetClassObject               = PROCEDURE,- 
        DllCanUnloadNow                 = PROCEDURE,- 
        GetProxyDllInfo                 = PROCEDURE,- 
        DllRegisterServer               = PROCEDURE,- 
        DllUnregisterServer             = PROCEDURE) 

PROXY_SHAREという名前のプロキシ/スタブ共用可能イメージは,次のオプション・ファイルを使用してシンボル・ベクタを定義します。


! 
! RPC Shareable Image 
! 
SYS$LIBRARY:DCOM$RPCRT4_SHR.EXE/SHARE 
! 
! 
! The list of symbols exported by PROXY_SHARE.EXE. 
! 
SYMBOL_VECTOR=(- 
        _Windu_DllMain_PROXY_SHARE/DllMain = PROCEDURE,- 
        DllGetClassObject                  = PROCEDURE,- 
        DllCanUnloadNow                    = PROCEDURE,- 
        GetProxyDllInfo                    = PROCEDURE,- 
        DllRegisterServer                  = PROCEDURE,- 
        DllUnregisterServer                = PROCEDURE) 

6.5 必要な OpenVMS Registry エントリ

この後の節では,必要な OpenVMS Registry エントリについて説明します。

6.5.1 HKEY_CLASSES_ROOT\CLSID

CLSID サブキーには,システムでサポートされるコンポーネントのすべての CLSID が含まれます。コンポーネントの CLSID はここに登録しなければなりません。登録する各 CLSID には,次の要素を含まなければなりません。

6.5.1.1 コンポーネント CLSID

クラス識別子 (CLSID) は,OLE クラス・オブジェクトに関連付けられたグローバル一意識別子 (GUID) です。COM for OpenVMS サーバ・アプリケーションは通常,CLSID を OpenVMS Registry に登録することで,クライアントが OLE クラス・オブジェクトに関連付けられた実行可能コードを検索して,ロードできるようにしています。

コンポーネントの CLSID はHKEY_CLASSES_ROOT\CLSIDというサブキーに登録します。

コンポーネント CLSID の登録には,次のサブキーを含まなければなりません。

6.5.1.2 プロキシ/スタブ CLSID

プロキシ/スタブ共用可能イメージは,インタフェースのパラメータをパッケージするためにインタフェース固有のオブジェクトを提供します。プロキシ/スタブ共用可能イメージにはオブジェクトが含まれるので,CLSID が必要であり,OpenVMS Registry に登録しなければなりません。プロキシの CLSID は,コンポーネントの CLSID と同じ方法で OpenVMS Registry に登録する必要があります。

プロキシの CLSID はHKEY_CLASSES_ROOT\CLSIDというサブキーに登録しなければなりません。

プロキシ/スタブ CLSID の登録には,次のサブキーを含まなければなりません。

6.5.2 HKEY_CLASSES_ROOT\インタフェース

Interfaceサブキーには,システムに登録されているすべてのインタフェースが含まれます。コンポーネントのインタフェース ID (IID) をこのサブキーに登録しなければなりません。

登録される各インタフェースには,少なくとも次のいずれかのサブキーが含まれます。

6.6 OpenVMS および Windows のエラー・コードのテキストへの変換

COM コンポーネントを開発し,テストする場合,OpenVMS システムと Windows NT システムから判読できないエラー・コードが返されることがあります。これらのコードをもっとわかりやすくするのに役立つように,Compaq はエラー・コードを表示可能なテキストに変換するための NTA$VMSGetMessage ルーチンを提供しています。

このルーチンを実装するには,NTA_MESSAGE.H ファイルを DCOM$LIBRARY: ディレクトリにインクルードし,DCOM$LIBRARY:NTA_GETMSG.OBJオブジェクト・モジュールとリンクしなければなりません。

この節では,NTA$VMSGetMessage ルーチンについて説明します。


NTA$VMSGetMessage

NTA$VMSGetMessage ルーチンはエラー・コードを表示可能なテキストに変換します。入力エラー・コードは次のいずれかでなければなりません。


形式

Return=NTA$VMSGetMessage (status, text, flag, [count])


引数

status


OpenVMS使用法: error_code
タイプ: longword (unsigned)
アクセス: read only
メカニズム: by value


この状態フィールドは次のいずれかでなければなりません。

入力エラー・コード
OpenVMS エラー・コード 0x074AA6BA
Windows HRESULT 0x80070031
Windows Win32 エラー・コード 0x00000031
Windows NT ユーザ定義ビットがセットされた状態コード 0xE74AA6BA

セキュリティ API が Windows NT 状態コードを返す場合は,状態フィールドの形式は OpenVMS 状態コードと Windows NT 状態コントロール・ビット・セットの OR です。次の例を参照してください。

入力エラー・コード 結果
OpenVMS エラー・コード 0x074AA6BA
Windows NT 状態コード 0xE74AA6BA

text


OpenVMS使用法: error_text
タイプ: character string
アクセス: write
メカニズム: by reference


この引数は最後が NULL の文字列であり,SYS$GETMSG システム・サービスから返されたテキストが含まれます。返される最大サイズ (SYS$GETMSG システム・サービスで定義されているサイズ) は 256 バイトです。メモリが上書きされないようにするために,呼び出し側は少なくとも 257 バイトのバッファ・アドレスを提供しなければなりません。

flag


OpenVMS使用法: flag
タイプ: longword (unsigned)
アクセス: read only
メカニズム: by value


エラー・コードの変換を制御します。次の値は NTA_MESSAGE.H に定義されています。

NTAWIN$_UNKNOWN 不明のエラー・コード
NTAWIN$_VMS OpenVMS エラー・コード
NTAWIN$_NT Windows HRESULT エラー・コード
NTAWIN$_WINDOWS Windows Win32 エラー・コード
NTAWIN$_USER Windows NT 状態コード

NTAWIN$_UNKNOWN という値を指定した場合は,できるだけ正しいテキストを作成できるように,最適な見積もりが行われます。ルーチンはテキストを次のように解析します。

  1. まず,Windows HRESULT であるかどうか確認します (上位ニブル = 0x8)。Windows HRESULT でない場合は,次のステップに進みます。

  2. 次に,Windows NT のユーザ定義状態コードであるかどうか確認します (上位ニブル = 0xE)。この条件が満たされない場合は,次のステップに進みます。

  3. これは OpenVMS エラー・コードであると判断されます。

    OpenVMS エラー・コードと Windows Win32 エラー・コードの区別はできません。

count


OpenVMS使用法: FAO count
タイプ: longword (unsigned)
アクセス: write
メカニズム: by reference


この引数は,戻りメッセージに任意に返される FAO 引数の数です。現在,すべての NTAWIN メッセージで ASCII 置換引数 (!AS) だけが使用されています。呼び出し側は SYS$FAO で置換する前に,すべての数値データを ASCII に変換しなければなりません。

説明このルーチンは OpenVMS SYS$GETMSG システム・サービスを使用します。メッセージは SYS$MESSAGE:NTAWINMSG.EXE イメージと SYS$MESSAGE:NTARPCMSG.EXE イメージに格納されます。

このルーチンを呼び出すには,NTA_MESSAGE.H ファイルを DCOM$LIBRARY: ディレクトリにインクルードし,SYS$LIBRARY:DCOM$WIN32_SHR 共用可能イメージとリンクしなければなりません。


返される条件値

SYS$GETMSG システム・サービスからの状態

SYS$GETMSG システム・サービスの詳細については,『OpenVMS System Services Reference Manual』を参照してください。


前へ 次へ 目次 索引