Windows RPC对象编组

时间:2016-08-05 22:10:31

标签: c++ com rpc midl

我正在尝试使用Windows RPC在两个进程(C / C ++,32位,Win7)之间进行通信。

我已经按照这里的示例Instruction to RPC成功地使RPC工作了。现在我也很难让代理/存根工作起作用。

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之外的其他内容时,会向我发出访问冲突。

这就是我所做的:

  • 根据生成的demo_i.c,demo_p.c,dlldata.c构建DLL。设置REGISTER_PROXY_DLL和包含五个私有条目的def文件。我已经用regsvr32(来自WOW64的那个)注册了它。

  • 在服务器进程中创建了一个DemoImpl类,该类扩展了IDemo并实现了ThisIsAMethod以及AddRef和朋友。

  • 使用单行GetDemo(IDemo** service)

  • 实施*service = new DemoImpl();

当我从客户端进程调用GetDemo时,服务器进程以访问冲突(0x00000014)终止。堆栈跟踪显示它发生在rpcrt4内的一个单独的线程中。

我原以为该东西会将代理返回给客户端。

我怀疑我在这里做了一些根本错误的事情。首先,我找不到使用new创建接口对象实例的示例。 CoGetClassObject或其他什么东西都有些神奇。不知道这些函数应该如何知道在哪里找到实现。

0 个答案:

没有答案