次の方法で共有


DllGetClassObject 関数 (combaseapi.h)

DLL オブジェクト ハンドラーまたはオブジェクト アプリケーションからクラス オブジェクトを取得します。

OLE では、この関数は提供されません。 OLE コンポーネント オブジェクト モデル (COM) をサポートする DLL は、OLE オブジェクト ハンドラーまたは DLL アプリケーションで DllGetClassObject を 実装する必要があります。

構文

HRESULT DllGetClassObject(
  [in]  REFCLSID rclsid,
  [in]  REFIID   riid,
  [out] LPVOID   *ppv
);

パラメーター

[in] rclsid

正しいデータとコードを関連付ける CLSID。

[in] riid

呼び出し元がクラス オブジェクトとの通信に使用するインターフェイスの識別子への参照。 通常、これはIID_IClassFactoryです (OLE ヘッダーで IClassFactory のインターフェイス識別子として定義されます)。

[out] ppv

riid で要求されたインターフェイス ポインターを受け取るポインター変数のアドレス。 正常に戻ると、*ppv には要求されたインターフェイス ポインターが含まれます。 エラーが発生した場合、インターフェイス ポインターは NULL です

戻り値

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

リターン コード 説明
S_OK
オブジェクトが正常に取得されました。
CLASS_E_CLASSNOTAVAILABLE
DLL では、 クラス (オブジェクト定義) はサポートされていません。

注釈

CoGetClassObject 関数の呼び出しで DLL に読み込まれるクラス オブジェクトが見つかると、CoGetClassObject は DLL のエクスポートされた DllGetClassObject 関数を使用します。

呼び出し元へのメモ

DllGetClassObject を直接呼び出さないでください。 オブジェクトが DLL で定義されている場合、 CoGetClassObjectCoLoadLibrary 関数を呼び出して DLL を読み込み、 DllGetClassObject を呼び出します。

実装者へのメモ

COM をサポートする DLL に DllGetClassObject を実装 (およびエクスポート) する必要があります。

DllGetClassObject の実装の例 (C++) を次に示します。 この例では、 DllGetClassObject はクラス オブジェクトを作成し、 その QueryInterface メソッドを呼び出して、riid で要求されたインターフェイスへのポインターを取得します。 実装では、 IClassFactory インターフェイスに保持されている参照が解放されます。これは、 IClassFactory への参照カウントされたポインターを呼び出し元に返すからです。

HRESULT _export CALLBACK DllGetClassObject 
    (REFCLSID rclsid, REFIID riid, LPVOID * ppvObj) 
{ 
    HRESULT hr = E_OUTOFMEMORY; 
    *ppvObj = NULL; 
 
    CClassFactory *pClassFactory = new CClassFactory(rclsid); 
    if (pClassFactory != NULL)   { 
        hr = pClassFactory->QueryInterface(riid, ppvObj); 
        pClassFactory->Release(); 
    } 
    return hr;
} 

要件

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

こちらもご覧ください

CoGetClassObject

DllCanUnloadNow