Поделиться через


Функция CoRegisterPSClsid (combaseapi.h)

Позволяет загруженной библиотеке DLL регистрировать пользовательские интерфейсы в выполняемом процессе, чтобы код маршалинга мог маршалировать эти интерфейсы.

Синтаксис

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

Параметры

[in] riid

Указатель на IID регистрируемых интерфейсов.

[in] rclsid

Указатель на CLSID библиотеки DLL, которая содержит код прокси-сервера или заглушки для пользовательского интерфейса, заданного riid.

Возвращаемое значение

Эта функция может возвращать стандартные возвращаемые значения E_INVALIDARG, E_OUTOFMEMORY и S_OK.

Комментарии

Как правило, код, отвечающий за маршалинг указателя интерфейса в текущий выполняемый процесс, считывает раздел HKEY_CLASSES_ROOT\Interfaces реестра, чтобы получить ИДЕНТИФИКАТОР CLSID библиотеки DLL, содержащей код ProxyStub для загрузки. Чтобы получить идентификаторы CLSID ProxyStub для существующего интерфейса, код вызывает функцию CoGetPSClsid .

Однако в некоторых случаях может быть желательно или необходимо, чтобы внутрипроцессный обработчик или внутрипроцессный сервер сделали свои пользовательские интерфейсы доступными без записи в реестр. Библиотека DLL, скачаемая по сети, может даже не иметь разрешения на доступ к локальному реестру, а так как код был создан на другом компьютере, пользователь в целях безопасности может захотеть запустить его в ограниченной среде. Кроме того, библиотека DLL может иметь пользовательские интерфейсы, которые она использует для взаимодействия с удаленным сервером, а также может включать код ProxyStub для этих интерфейсов. В таких случаях библиотеке DLL требуется альтернативный способ регистрации своих интерфейсов. CoRegisterPSClsid, используемый в сочетании с CoRegisterClassObject, предоставляет эту альтернативу.

Примеры

Библиотека 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
Header combaseapi.h (включая Objbase.h)
Библиотека Ole32.lib
DLL Ole32.dll

См. также раздел

CoGetPSClsid

CoRegisterClassObject