本地 COM 接口的 C++ IPC 替代品?

Posted

技术标签:

【中文标题】本地 COM 接口的 C++ IPC 替代品?【英文标题】:C++ IPC replacement for local COM interface? 【发布时间】:2010-11-23 15:15:03 【问题描述】:

当前设置:

Windows C++ 原生应用程序提供了一个 COM 接口,供许多插件可执行文件使用(RPC 风格,简单的函数调用)。通信只在本地机器上。

[App.exe (COM server)] <-> [plugin1.exe (COM client / possible callbacks etc.)]
                       <-> [plugin2.exe (COM client)]

我们现在想用其他东西替换选定插件的 COM 接口。

对于本地“RPC 风格”IPC,我们有哪些选项可以像 COM 一样易于使用?

适用以下限制:

性能必须至少与本地 COM 调用一样好。 (鉴于 Steve's answer,任何不会比本地进程外 COM 调用执行得多的替代方案都会有所帮助!) 界面应该易于使用。在客户端或服务器中使用接口时,无需显式摆弄内存和原始套接字。 Windows 上的原生 C++

【问题讨论】:

为什么要替换现有的?这个问题的答案可能会为更好的解决方案提供一些启示。 @John:“为什么”故意留空,以便让那些回答手头的问题的人集中注意力。 【参考方案1】:

进程之间的性能永远不会匹配本地 COM 与进程内服务器,因为进程内 COM 调用简化为调用线程上的简单函数调用。对于进程间流量,总是会有编组和上下文切换开销,这会使其变慢。

更进一步,您不太可能构建像 COM 一样简单的东西,它可以像 COM 一样执行任何操作。对于本地的进程外服务器,COM 将在名为 LRPC 的优化 RPC 堆栈上运行。

【讨论】:

Steve - 目前它不是在进程中,它不应该在进程中,所以显然我不会将进程内调用与进程外调用进行比较。但是感谢指向 LRPC 的指针……看来 COM 已经非常优化了。

以上是关于本地 COM 接口的 C++ IPC 替代品?的主要内容,如果未能解决你的问题,请参考以下文章

使用 IDispatch 的 C++ 和 COM 的类似动态的替代方案

c++ 中 MFC 函数的替代方案?

text 用于本地远程服务器sqlbuddy.com的MysqlAdmin的替代方案

替代 itoa() 将整数转换为字符串 C++? [复制]

替代谷歌本地搜索以获取附近的餐馆[关闭]

替代 C/C++ localtime()