前へ | 次へ | 目次 | 索引 |
プロセス内コンポーネント共用可能イメージの依存関係の一覧は,クライアント・イメージやコンポーネント実行可能イメージとは少し異なります。リンク時に発生する特定の依存関係は次のとおりです。
プロセス内コンポーネント共用可能イメージをリンクするには,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) |
プロキシ/スタブ共用可能イメージの依存関係の一覧は,クライアントおよびコンポーネント実行可能イメージの依存関係とは少し異なります。リンク時に発生する特定の依存関係は次のとおりです。
プロキシ/スタブ共用可能イメージのリンクでは,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) |
この後の節では,必要な OpenVMS Registry エントリについて説明します。
6.5.1 HKEY_CLASSES_ROOT\CLSID
CLSID サブキーには,システムでサポートされるコンポーネントのすべての CLSID が含まれます。コンポーネントの CLSID はここに登録しなければなりません。登録する各 CLSID には,次の要素を含まなければなりません。
クラス識別子 (CLSID) は,OLE クラス・オブジェクトに関連付けられたグローバル一意識別子 (GUID) です。COM for OpenVMS サーバ・アプリケーションは通常,CLSID を OpenVMS Registry に登録することで,クライアントが OLE クラス・オブジェクトに関連付けられた実行可能コードを検索して,ロードできるようにしています。
コンポーネントの CLSID はHKEY_CLASSES_ROOT\CLSIDというサブキーに登録します。
コンポーネント CLSID の登録には,次のサブキーを含まなければなりません。
このキーの値は最後が 0 の文字列であり,CLSID のプログラム ID を表すデータ値です。通常,program.component.version という形式です。
このキーの値は最後が 0 の文字列であり,CLSID のプログラム ID (バージョン番号を除く ID) を表すデータ値です。通常,program.component という形式です。
タイプ・ライブラリは,IDispatchインタフェースを実装するときに重要です。タイプ・ライブラリは,OLE オートメーションRegisterTypeLib実行時ルーチンを呼び出すときに,それ自体を登録します。 Typelibサブキーをコンポーネントの CLSID の下に追加しなければなりません。Typelibサブキーには,タイプ・ライブラリの GUID が含まれます。たとえば,次のキーには LIBID を含まなければなりません。
HKEY_CLASSES_ROOT\CLSID\{GUID}\TYPELIB {value=LIBID} |
プロキシ/スタブ共用可能イメージは,インタフェースのパラメータをパッケージするためにインタフェース固有のオブジェクトを提供します。プロキシ/スタブ共用可能イメージにはオブジェクトが含まれるので,CLSID が必要であり,OpenVMS Registry に登録しなければなりません。プロキシの CLSID は,コンポーネントの CLSID と同じ方法で OpenVMS Registry に登録する必要があります。
プロキシの CLSID はHKEY_CLASSES_ROOT\CLSIDというサブキーに登録しなければなりません。
プロキシ/スタブ CLSID の登録には,次のサブキーを含まなければなりません。
InProcServer32の値は最後が 0 の文字列であり,プロキシ/スタブ共用可能イメージの場所を表すデータ値です。プロキシ/スタブ CLSID とそのサブキーを使用して,COM はプロキシ/スタブ共用可能イメージを検索することができます。
6.5.2 HKEY_CLASSES_ROOT\インタフェース
Interfaceサブキーには,システムに登録されているすべてのインタフェースが含まれます。コンポーネントのインタフェース ID (IID) をこのサブキーに登録しなければなりません。
登録される各インタフェースには,少なくとも次のいずれかのサブキーが含まれます。
ProxyStubClsid32の値は最後が 0 の文字列であり,これはプロキシ/スタブ共用可能イメージの CLSID を表すデータ値です。この CLSID は,第 6.5.1.2 項 で説明したものと同じでなければなりません。
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 ルーチンはエラー・コードを表示可能なテキストに変換します。入力エラー・コードは次のいずれかでなければなりません。
- OpenVMS エラー・コード
- Windows HRESULT
- Windows Win32 エラー・コード
- "ユーザ定義の" Windows NT 状態コード・セット
Return=NTA$VMSGetMessage (status, text, flag, [count])
説明このルーチンは OpenVMS SYS$GETMSG システム・サービスを使用します。メッセージは SYS$MESSAGE:NTAWINMSG.EXE イメージと SYS$MESSAGE:NTARPCMSG.EXE イメージに格納されます。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 という値を指定した場合は,できるだけ正しいテキストを作成できるように,最適な見積もりが行われます。ルーチンはテキストを次のように解析します。
- まず,Windows HRESULT であるかどうか確認します (上位ニブル = 0x8)。Windows HRESULT でない場合は,次のステップに進みます。
- 次に,Windows NT のユーザ定義状態コードであるかどうか確認します (上位ニブル = 0xE)。この条件が満たされない場合は,次のステップに進みます。
- これは OpenVMS エラー・コードであると判断されます。
OpenVMS エラー・コードと Windows Win32 エラー・コードの区別はできません。
count
OpenVMS使用法: FAO count タイプ: longword (unsigned) アクセス: write メカニズム: by reference
この引数は,戻りメッセージに任意に返される FAO 引数の数です。現在,すべての NTAWIN メッセージで ASCII 置換引数 (!AS) だけが使用されています。呼び出し側は SYS$FAO で置換する前に,すべての数値データを ASCII に変換しなければなりません。
このルーチンを呼び出すには,NTA_MESSAGE.H ファイルを DCOM$LIBRARY: ディレクトリにインクルードし,SYS$LIBRARY:DCOM$WIN32_SHR 共用可能イメージとリンクしなければなりません。
SYS$GETMSG システム・サービスからの状態SYS$GETMSG システム・サービスの詳細については,『OpenVMS System Services Reference Manual』を参照してください。
前へ | 次へ | 目次 | 索引 |