ランニングオブジェクトテーブル (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 |
| URL | https://github.com/inovia/IronHSP |
| 備考 | Win32 API の com_misc.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。 |
| タイプ | 拡張命令 |
| グループ | Win32API |
| 対応環境 |
|
| hs ファイル | hsphelp\win32_com_misc_gen2.hs |