首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于COM的Windows本地机器进程间通信

基于COM的Windows本地机器进程间通信
EN

Stack Overflow用户
提问于 2015-01-19 12:05:12
回答 1查看 1K关注 0票数 1

我正在研究使用COM和C++在Windows上进行进程间通信的选项。

我找到了本文是关于MSDN的,为Windows提供了进程间通信选项列表,COM就是其中之一。

但是,不幸的是,COM选项只是列出,没有太多的细节。

有人有关于如何在Windows上使用COM进行进程间通信的文档或其他资源的指针吗?

我不想与远程机器通信(所以:没有DCOM);我只对同一台本地机器上的进程间通信感兴趣。

其思想是定义实现某些自定义通信协议的自定义COM接口,然后有一个服务器程序和一个客户机程序(每个程序都在自己的进程中运行,运行在同一台本地机器上),并使用COM在两者之间进行通信(例如,客户端向服务器发出请求,服务器返回正确的答案,一切都使用COM接口)。

因此,例如:是否有预定义的COM接口来实现进程间通信?如果是,他们是什么?

有一些关于这个主题的教程或更详细的指南将是有帮助的。

EN

回答 1

Stack Overflow用户

发布于 2015-01-19 13:18:43

如果您有一个双方都知道的COM接口,那么有一个进程可以使用一个名称对象向运行对象表注册实现该接口的对象。然后,另一个进程可以使用moniker标识符从这个进程间表中检索对象,并将其查询到已知的接口。现在,客户端进程引用了另一个进程中存在的内容,调用将由COM封送。

但是有很多事情要出错,特别是在确保您的接口被正确地编排的时候。在开始使用多个进程或在COM接口中使用.Net之前,通常不会很好地测试编组。使用油自动化兼容类型并使用[oleautomation]属性标记IDL中的接口可以帮助确保类库编组工作,但也需要注意数组中使用的其他属性。几年前,我们在IPropertyBag2接口中发现了这种情况。Visual 6 IDL描述在ocidl.idl中如下所示:

代码语言:javascript
运行
复制
HRESULT Read(
            [in] ULONG cProperties,
            [in] PROPBAG2 * pPropBag,
            [in] IErrorLog * pErrLog,
            [out] VARIANT * pvarValue,
            [out] HRESULT * phrError
        );

并且不会从所提供的数组中筛选出一个以上的变量。更新的版本如下所示:

代码语言:javascript
运行
复制
HRESULT Read(
           [in] ULONG cProperties,
           [in, size_is(cProperties)] PROPBAG2 * pPropBag,
           [in, unique] IErrorLog * pErrLog,
           [out, size_is(cProperties)] VARIANT * pvarValue,
           [in, out, unique, size_is(cProperties)] HRESULT * phrError
       );

它正确地将pvarValue数组的大小与cProperties参数指定的大小关联起来。假设一个带有第二个定义的类库已经注册,那么这个接口现在应该正确地进行编组,但是几年前,这些缺失的参数花费了我们几个脑细胞,找出了持久性失败的原因。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28024261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档