Маршрутизация объектов Windows RPC

59
10

Я пытаюсь использовать Windows RPC для обмена данными между двумя процессами (C/C++, 32bit, Win7).

Я следовал примеру здесь Инструкции к RPC и успешно получил RPC для работы. Теперь у меня возникают трудности с тем, чтобы работать с proxy/stub.

Файл IDL выглядит следующим образом:

[ uuid(3cb112c0-688a-4611-83b6-31d33d87ea28), object ]
interface IDemo : IUnknown
{
HRESULT ThisIsAMethod([in, string] const char* test);
}

[ uuid(60ad6a21-ba49-483a-b0a2-faa5187b8299), version(1.0),
implicit_handle(handle_t hDemoBinding)]
interface IDemoRPC
{
void SimpleTest();
void GetDemo([out] IDemo** service);
void Shutdown();
}

Я могу вызвать SimpleTest() удаленно на сервере от клиента. Работает отлично. Но GetDemo() дает мне нарушение прав доступа, когда сервер "возвращает" что-то еще, чем NULL.

Вот что я сделал:

    Создайте DLL на основе сгенерированных demo_i.c, demo_p.c, dlldata.c. С набором REGISTER_PROXY_DLL и файлом def, содержащим пять частных записей. Я зарегистрировал его с помощью regsvr32 (от WOW64).

    Создал класс DemoImpl в серверном процессе, который расширяет IDemo и реализует ThisIsAMethod а также AddRef и друзей.

    Реализована GetDemo(IDemo** service) с однострочным *service = new DemoImpl();

Когда я GetDemo из клиентского процесса, серверный процесс завершается с нарушением доступа (0x00000014). Стектура показывает, что это происходит в отдельном потоке в пределах rpcrt4.

Я бы ожидал, что вещь вернет прокси-сервер клиенту.

У меня есть подозрение, что я делаю что-то принципиально неправильное здесь. Во-первых, я не могу найти пример, когда экземпляры объектов интерфейса создаются с new. Всегда есть какая-то магия с CoGetClassObject или что-то в этом роде. Не знаю, как эти функции должны знать, где найти реализацию.

спросил(а) 2016-08-06T01:10:00+03:00 4 года, 2 месяца назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема