coRegisterPSClsid 函数 (combaseapi.h)

允许下载的 DLL 在其运行进程中注册其自定义接口,以便封送处理代码能够封送这些接口。

语法

HRESULT CoRegisterPSClsid(
  [in] REFIID   riid,
  [in] REFCLSID rclsid
);

参数

[in] riid

指向要注册的接口的 IID 的指针。

[in] rclsid

指向 DLL CLSID 的指针,该 DLL 包含 riid 指定的自定义接口的代理/存根代码。

返回值

此函数可以返回E_INVALIDARG、E_OUTOFMEMORY和S_OK的标准返回值。

备注

通常,负责将接口指针封送到当前正在运行的进程的代码读取注册表 的HKEY_CLASSES_ROOT\Interfaces 节,以获取包含要加载的 ProxyStub 代码的 DLL 的 CLSID。 为了获取现有接口的 ProxyStub CLSID,代码调用 CoGetPSClsid 函数。

但是,在某些情况下,进程内处理程序或进程内服务器可能需要使其自定义接口可用,而无需写入注册表。 通过网络下载的 DLL 甚至可能无权访问本地注册表,并且由于代码源自另一台计算机,出于安全考虑,用户可能需要在受限的环境中运行它。 或者 DLL 可能具有用于与远程服务器通信的自定义接口,还可能包含这些接口的 ProxyStub 代码。 在这种情况下,DLL 需要另一种方法来注册其接口。 与 CoRegisterClassObject 结合使用的 CoRegisterPSClsid 提供了该替代项。

示例

DLL 通常会调用 CoRegisterPSClsid ,如以下代码片段所示。

HRESULT RegisterMyCustomInterface(DWORD *pdwRegistrationKey)
{
    HRESULT hr = CoRegisterClassObject(CLSID_MyProxyStubClsid,
        pIPSFactoryBuffer,
        CLSCTX_INPROC_SERVER,
        REGCLS_MULTIPLEUSE
        pdwRegistrationKey);
    if(SUCCEEDED)(hr))
    {
        hr = CoRegisterPSClsid(IID_MyCustomInterface, CLSID_MyProxyStubClsid);
    }
 
    return hr;
}

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 combaseapi.h (包括 Objbase.h)
Library Ole32.lib
DLL Ole32.dll

另请参阅

CoGetPSClsid

CoRegisterClassObject