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 中定义对象时, CoGetClassObject 会调用 CoLoadLibrary 函数来加载 DLL,后者又调用 DllGetClassObject

实施者说明

需要在 (中实现 DllGetClassObject ,并从支持 COM 的) DLL 中导出它。

示例

下面是在 C++) DllGetClassObject 实现中 (的示例。 在此示例中, 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