IRunningObjectTable_Register

ランニングオブジェクトテーブル (ROT) にオブジェクトとそれを識別するモニカーを登録する。

IRunningObjectTable_Register this, grfFlags, punkObject, pmkObjectName, pdwRegister

this : [comobj] IRunningObjectTable インターフェースの COM オブジェクト変数
grfFlags : [int] ROT の punkObject への参照が弱参照か強参照かを指定し、ROT のエントリを通じたオブジェクトへのアクセスを制御する。詳細は Remarks セクションを参照。
punkObject : [int] 実行中として登録されるオブジェクトへのポインタ。
pmkObjectName : [comobj] punkObject を識別するモニカーへのポインタ。
pdwRegister : [int] IRunningObjectTable::Revoke や IRunningObjectTable::NoteChangeTime の後続呼び出しで使用できる、この ROT エントリの識別子。呼び出し側はこのパラメータに NULL を指定できない。エラーが発生した場合、*pdwRegister は 0 に設定される。

(プラグイン / モジュール : com_misc.dll)

解説

ランニングオブジェクトテーブル (ROT) にオブジェクトとそれを識別するモニカーを登録する。

[戻り値]
このメソッドは標準の戻り値 E_INVALIDARG、E_OUTOFMEMORY、および次の値を返すことがある。
(以下省略)

[備考]
このメソッドは、オブジェクトへのポインタを、そのオブジェクトを識別するモニカーの下に登録する。モニカーは
IRunningObjectTable::GetObject
によってテーブルが検索される際のキーとして使用される。オブジェクトが登録されるとき、ROT は常にオブジェクトに対して AddRef
を呼ぶ。弱参照登録 (ROTFLAGS_REGISTRATIONKEEPSALIVE が未設定) の場合、ROT
はオブジェクトへの最後の強参照が解放されたときにオブジェクトを解放する。強参照登録
(ROTFLAGS_REGISTRATIONKEEPSALIVE が設定) の場合、ROT
は登録が明示的に取り消されるまでオブジェクトが破棄されるのを防ぐ。LocalService または RunAs
として登録されたサーバは、Register 呼び出しで ROTFLAGS_ALLOWANYCLIENT
フラグを設定して任意のクライアントからの接続を許可できる。このビットを設定するサーバは、実行ファイル用の AppID
を参照するレジストリの AppID セクションに実行ファイル名が登録されている必要がある。"activate as activator"
サーバ (LocalService や RunAs として登録されていないもの) は Register
呼び出しでこのフラグを設定してはならない。サービスのインストールの詳細は Installing as a Service
Application を参照。同じモニカーで 2
つ目のオブジェクトを登録したり、同じモニカーで同じオブジェクトを再登録したりすると、ROT には 2 つのエントリが作られる。この場合
Register は MK_S_MONIKERALREADYREGISTERED を返す。重複するエントリでも pdwRegister
の識別子が異なるため、Register の各呼び出しには対応する IRunningObjectTable::Revoke
の呼び出しが必要である。重複登録の問題点は、その後 IRunningObjectTable::IsRunning
でそのモニカーを指定したときにどのオブジェクトが返されるかを決定する方法がないことである。呼び出し側への注意 モニカープロバイダ
(他者がアクセスできるよう、自身のオブジェクトを識別するモニカーを配布する側) の場合、オブジェクトが実行を開始したときに
Register
メソッドを呼んでオブジェクトを登録する必要がある。ロード中にオブジェクトがリネームされた場合もこのメソッドを呼ぶ必要がある。
最も一般的なモニカープロバイダは複合ドキュメントのリンクソースである。これには自ドキュメント (またはその一部)
へのリンクをサポートするサーバアプリケーションや、ドキュメント内の埋め込みへのリンクをサポートするコンテナアプリケーションが含まれる。リンクをサポートしないサーバアプリケーションも、ROT
を用いて埋め込みへのリンクをサポートするコンテナアプリケーションと協調することができる。
サーバアプリケーションを書いている場合、オブジェクトが実行を開始したとき (典型的には IOleObject::DoVerb の実装内で)
そのオブジェクトを ROT に登録すべきである。オブジェクトは完全なモニカーで登録しなければならず、これには
IOleClientSite::GetMoniker
を使ってコンテナドキュメントのモニカーを取得する必要がある。コンテナドキュメントがリネームされた際に呼ばれる
IOleObject::SetMoniker
の実装内でも、オブジェクトを取り消して再登録すべきである。埋め込みへのリンクをサポートするコンテナアプリケーションを書いている場合、ドキュメントがロードされたときに
ROT に登録すべきである。ドキュメントがリネームされた場合は ROT
での取り消し・再登録を行い、ドキュメント内の埋め込みオブジェクトに対して IOleObject::SetMoniker
を呼んで再登録の機会を与えるべきである。ROT
に登録したオブジェクトは、実行されなくなったときやそのモニカーが変更されたときに明示的に取り消す必要がある。システムが自動的に ROT
からエントリを削除する方法はないため、この取り消しは重要である。pdwRegister
を介して書き込まれた識別子をキャッシュし、IRunningObjectTable::Revoke
呼び出しに渡して登録を取り消す必要がある。強参照登録の場合、登録が取り消されると強参照が解放される。Windows Server 2003
以降では、予期しないサーバの問題により古いエントリが ROT に残っている場合、COM が自動的にそれらの古いエントリを ROT
から削除する。システムの Register 実装は、登録前にモニカーが完全に簡約化されていることを保証するために
pmkObjectName パラメータに対して IMoniker::Reduce を呼び出す。1
つのオブジェクトが複数の完全に簡約化されたモニカーで知られる場合、それらすべてのモニカーで登録するべきである。

情報

プラグイン / モジュールcom_misc.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の com_misc.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_com_misc_gen2.hs