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、および次の値を返すことができます。
リターン コード | 説明 |
---|---|
|
オブジェクトが正常に取得されました。 |
|
DLL では、 クラス (オブジェクト定義) はサポートされていません。 |
注釈
CoGetClassObject 関数の呼び出しで DLL に読み込まれるクラス オブジェクトが見つかると、CoGetClassObject は DLL のエクスポートされた DllGetClassObject 関数を使用します。
呼び出し元へのメモ
DllGetClassObject を直接呼び出さないでください。 オブジェクトが DLL で定義されている場合、 CoGetClassObject は CoLoadLibrary 関数を呼び出して 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 を含む) |