CoRegisterClassObject 関数 (combaseapi.h)

他のアプリケーションが OLE に接続できるよう、EXE クラス オブジェクトを OLE に登録します。

構文

HRESULT CoRegisterClassObject(
  [in]  REFCLSID  rclsid,
  [in]  LPUNKNOWN pUnk,
  [in]  DWORD     dwClsContext,
  [in]  DWORD     flags,
  [out] LPDWORD   lpdwRegister
);

パラメーター

[in] rclsid

登録する CLSID。

[in] pUnk

可用性が公開されているクラス オブジェクトの IUnknown インターフェイスへのポインター。

[in] dwClsContext

実行可能コードを実行するコンテキスト。 これらのコンテキスト値の詳細については、 CLSCTX 列挙を参照してください。

[in] flags

クラス オブジェクトへの接続方法を示します。 これらのフラグの詳細については、 REGCLS 列挙を参照してください。

[out] lpdwRegister

登録されているクラス オブジェクトを識別する値へのポインター。登録を取り消すために CoRevokeClassObject 関数によって後で使用されます。

戻り値

この関数は、標準の戻り値E_INVALIDARG、E_OUTOFMEMORY、E_UNEXPECTED、および次の値を返すことができます。

リターン コード 説明
S_OK
クラス オブジェクトが正常に登録されました。

注釈

EXE オブジェクト アプリケーションでは、起動時に CoRegisterClassObject を 呼び出す必要があります。 また、EXE で使用するのと同じ EXE またはその他のコード (DLL など) で使用する内部オブジェクトを登録するためにも使用できます。 EXE オブジェクト アプリケーションのみが CoRegisterClassObject を呼び出します。 オブジェクト ハンドラーまたは DLL オブジェクト アプリケーションでは、この関数は呼び出されません。代わりに、 DllGetClassObject 関数を実装してエクスポートする必要があります。

起動時に、複数使用の EXE オブジェクト アプリケーションでクラス オブジェクト ( IClassFactory インターフェイスを含む) を作成し、 CoRegisterClassObject を呼び出してクラス オブジェクトを登録する必要があります。 複数の異なるクラス (複数の種類の埋め込み可能オブジェクトなど) をサポートするオブジェクト アプリケーションでは、それぞれに異なるクラス オブジェクトを割り当てて登録する必要があります。

同じクラス オブジェクトの複数の登録は独立しており、エラーは発生しません。 後続の登録のたびに、 lpdwRegister に一意のキーが生成されます。

複数のドキュメント インターフェイス (MDI) アプリケーションは、クラス オブジェクトを登録する必要があります。 単一ドキュメント インターフェイス (SDI) アプリケーションは、 /Embedding スイッチを使用して起動できる場合にのみ、クラス オブジェクトを登録する必要があります。

クラス オブジェクトのサーバーは、次のすべてが当てはまる場合に CoRevokeClassObject を呼び出してクラス オブジェクトを取り消す (登録を削除する) 必要があります。

  • オブジェクト定義の既存のインスタンスはありません。
  • クラス オブジェクトにロックはありません。
  • クラス オブジェクトにサービスを提供するアプリケーションは、ユーザー制御下にありません (ディスプレイ上のユーザーには表示されません)。
クラス オブジェクトが取り消されると、その参照カウントが 0 に達すると、クラス オブジェクトを解放して、アプリケーションを終了できます。 CoRegisterClassObject はIUnknown::AddRef を呼び出し、CoRevokeClassObject はIUnknown::Release を呼び出すので、2 つの関数が AddRef/リリース ペアを形成します。

Windows Server 2003 の時点で、COM オブジェクト アプリケーションがサービスとして登録されている場合、COM は登録を検証します。 COM は、サービスコントロールマネージャー (SCM) のサービスのプロセス ID が登録プロセスのプロセス ID と一致することを確認します。 そうでない場合、COM は登録に失敗します。 COM オブジェクト アプリケーションがレジストリ キーを持たないシステム アカウントで実行されている場合、COM はオブジェクト アプリケーション ID を 起動ユーザーとして扱います。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリ |UWP アプリ]
対象プラットフォーム Windows
ヘッダー combaseapi.h (Objbase.h を含む)
Library Ole32.lib
[DLL] Ole32.dll

こちらもご覧ください

CLSCTX

CoGetClassObject

CoRevokeClassObject

DllGetClassObject

REGCLS