Привет всем. Помогите решить проблему, суть которой в следующем: есть клиент(dll) и сервер(exe), который запускается на удаленной машине. В клиенте при активации сервера CoCreateInstanceEx(CLSID_COMdev,NULL,CLSCTX_REMOTE_SERVER,&csi,1,qi) я получаю нужный интерфейс
m_iCOMdev = (ICOMdev*)qi[0].pItf, а затем вызываю метод сервера, через параметры которого хочу передать ссылку на интерфейс клиента m_iCOMdev->OpenConnection(GetUnknown()).
Когда на сервере пытаюсь получить конкретный интерфейс клиента
STDMETHODIMP CCOMdev::OpenConnection(IUnknown *pLink)
......
IPropertyLink *piLink = NULL;
hr = pLink->QueryInterface(IID_IPropertyLink,(void**)&piLink);
.......
метод возвращает E_FAIL.
Для пересылки интерфейсов использую универсальный маршалинг.
Что делать?
DCOM - передача интерфейсов м/у клиентом и сервером
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
А что возвращает GetUnknown()?
GetUnknown() возвращает cссылку на базовый интерфейс IUnknown* текущего объекта клиента
На первый взгляд возможные причины: 1) клиент не реализует интерфейс IID_IPropertyLink; 2) IID_IPropertyLink не зарегистрирован на сервере.
Спасибо за помощь. Вроде как разобрался в чем причина: нужно было объявить IPropertyLink в операторе библиотеки сервера (клиент должен видеть этот интерфейс, чтобы создать объект-приемник - "механизм двустороннего обмена информацией с помощью косвенно-вызываемого интерфейса")
library SERVERLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
interface IPropertyLink;
...
library SERVERLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
interface IPropertyLink;
...