オブジェクトを管理するサーバー側が使用することもあります。そのオブジェクトと共にモニカをROTに格納することになります。様々なサーバーによって作成された現在実行中のオブジェクトが格納されています。GetRunningObjectTableから取得することができます。*pprot);reservedは、予約されているため0を指定します。pprotは、IRunningObjectTable型変数のアドレスを指定します。サーバーがどのようにしてオブジェクトを登録するかは、理解しておいたほうがよいといえます。オブジェクトへのバインドが高速になることが挙げられます。サーバーはオブジェクトをROTに登録したい段階になると、IRunningObjectTable::Registerを呼び出します。&dwRegister);Registerの呼び出しには登録したいオブジェクトとモニカが必要になります。モニカついてはサーバーが明示的に作成することになります。WordやExcelなどでは現在開かれているファイルを表すファイルモニカも作成しています。サーバーと同じウインドウステーション上で実行されているクライアントに制限されることになります。オブジェクトを取得できることになります。第4引数に返された値は、IRunningObjectTable::Revokeでオブジェクトの登録を解除する際に使用します。ROTに登録されたモニカは、EnumRunningで列挙することができます。**ppenumMoniker);ppenumMonikerは、IEnumMoniker型の変数のアドレスを指定します。今回のプログラムは、ROTに登録されているオブジェクトの名前を列挙します。(LPARAM)lpszDisplayName);pMoniker->Release();}pBindCtx->Release();pEnumMoniker->Release();pRunningObjectTable->Release();}実行結果を確認してみると、CLSIDを含んだアイテムモニカが多く列挙されているのではないかと思われます。表示されているCLSIDを基にレジストリを確認すれば、実際にどのようなオブジェクトが登録されているかを把握することができます。Studioを実行した状態で今回のプログラムを起動すればよいでしょう。現在開いているソリューションファイルのファイルモニカを作成します。実際に取得したオブジェクトが全て同一であるとは限りません。自作関数のEnumObjectFromROTでは、IRunningObjectTable::EnumRunningを呼び出すことでIEnumMonikerを取得しています。GetDisplayNameを呼び出せばモニカの表示名を取得することができます。目的のオブジェクトがROTに存在しているかを確認することになっています。実行されていない場合は新しくオブジェクトを作成するようになっています。ROTへ明示的にアクセスすることになります。TEXT("オブジェクトの取得に失敗しました。TEXT("オブジェクトを取得しました。実行されている場合はそのオブジェクトを返します。IRunningObjectTable::GetObjectを通じてモニカに関連するオブジェクトを取得します。CLSIDを基に実行中のオブジェクトを取得したい場合は、オートメーションAPIのGetActiveObjectを呼び出すのがよいと思われます。この関数は内部で、目的のCLISDを持ったオブジェクトをIRunningObjectTable::GetObjectで取得するようになっています。IRunningObjectTable::Registerを呼び出すよりも、RegisterActiveObjectを呼び出すのが適切であるかもしれません。