Передача интерфейса от клиента серверу
От: slavanap  
Дата: 15.09.12 10:33
Оценка:
Пытаюсь передать интерфейс от клиента серверу. В методе Backcall сервер вызывает метод интерфейса IAAA::Callback()
На локальной машине всё выполняется успешно. На двух разных компьютерах pIX->BackCall(aaa) возвращает E_ACCESSDENIED,
причём другие методы IX вызываются успешно. В каком направлении копать?

Клиент:
CoInitialize(NULL);

COSERVERINFO ServerInfo;
memset(&ServerInfo, 0, sizeof(ServerInfo));
ServerInfo.pwszName = L"myPC2";
MULTI_QI mqi[1];
mqi[0].pIID = &IID_IX; // [in] IID требуемого интерфейса
mqi[0].pItf = NULL; // [out] Указатель интерфейса
mqi[0].hr = S_OK; // [out] Результат вызова QI для интерфейса
hr = CoCreateInstanceEx(CLSID_Component1,
NULL,
CLSCTX_REMOTE_SERVER,
&ServerInfo,
1, // Число интерфейсов
mqi);

pIX = (IX*)mqi[0].pItf;
if (SUCCEEDED(hr)) {
IAAA *aaa = NULL;
aaa = new AAA();
hr = pIX->BackCall(aaa);
printf("0x%08x\n", hr);
aaa->Release();
}
}

// IDL описание интерфейсов

// Interface IAAA
[
object,
uuid(32bb8326-b41b-11cf-a6bb-0080c7b2d682),
helpstring("IAAA Interface"),
pointer_default(unique)
]
interface IAAA: IUnknown
{
HRESULT Callback();
};

// Interface IX
[
object,
uuid(32bb8323-b41b-11cf-a6bb-0080c7b2d682),
helpstring("IX Interface"),
pointer_default(unique)
]
interface IX: IUnknown
{
HRESULT FxStringIn([in, string] wchar_t* szIn);
HRESULT FxStringOut([out, string] wchar_t** szOut);
HRESULT BackCall([in] IUnknown* unk);
};

library ServerLib
{
importlib("stdole32.tlb");

interface IAAA;

// Component 1
[
uuid(0c092c29-882c-11cf-a6bb-0080c7b2d682),
helpstring("Component 1 Class")
]
coclass Component1
{
[default] interface IX;
};
};
Re: Передача интерфейса от клиента серверу
От: slavanap  
Дата: 15.09.12 22:20
Оценка:
Поправил записи в реестре, и разрешил приложения в брандмауэре. Теперь работает, но только при Identity = Interactive User.
При любом другом значении получаю всё тот же E_ACCESSDENIED.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.