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 |