本地 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 的类似动态的替代方案