C++ 远程过程调用

C++ 远程过程调用,c++,windows,rpc,C++,Windows,Rpc,有人知道在windows(非.net)环境中进行远程过程调用的好方法吗 我找不到很多关于如何做的信息,msdn只有.net版本 编辑: 谢谢你迄今为止的回答。我需要它的目的是与同一台计算机上的服务通信,该服务将向“客户端”发送进度报告。我对rpc感兴趣的原因是因为vistas uac和服务无法与普通应用程序通信,除非它们使用rpc或管道。查看管道,它们似乎完全基于文本,我的印象是rpc可以跨多个管道传递强类型值 我还将研究DCOM。is有一个基于DCE RPC的远程过程调用机制。如果您将系统构

有人知道在windows(非.net)环境中进行远程过程调用的好方法吗

我找不到很多关于如何做的信息,msdn只有.net版本

编辑:

谢谢你迄今为止的回答。我需要它的目的是与同一台计算机上的服务通信,该服务将向“客户端”发送进度报告。我对rpc感兴趣的原因是因为vistas uac和服务无法与普通应用程序通信,除非它们使用rpc或管道。查看管道,它们似乎完全基于文本,我的印象是rpc可以跨多个管道传递强类型值

我还将研究DCOM。

is有一个基于DCE RPC的远程过程调用机制。如果您将系统构建为COM组件,或者在要公开的API上放置COM包装器,那么您可以使用它。除此之外,您可能还想进一步了解问题的具体情况。我真的不知道这个问题是否有任何可能妨碍使用DCOM的方面


另一种方法是在应用程序周围放置一个web服务包装器。Web服务(当然是基于SOAP或XML-RPC的服务)实际上只是一种使用HTTP作为传输协议的RPC机制。

您可以在windows上以一百种不同的方式远程调用代码;套接字、DCom等。。。微软曾一度支持rpcgen(基于DCE RPC),允许您定义远程API调用,它的编译器将编写粘合代码。这是DCOM中的底层

它与UNIX ONC-RPC不兼容,UNIX ONC-RPC更易于使用,标准更广泛。你可能想看看像DCOM这样的东西是否适合你


Tony

如果您只对同一台机器上的进程之间的对话感兴趣,那么这是一种很酷的方式,可以为它们提供一个对话通道

更特定于windows的解决方案是系统和全局互斥体/信号或

google是将进程之间发送的数据转换为二进制字符串的方法,二进制字符串不太依赖于结构打包和不同可执行文件之间可能存在差异的其他内容


boost::interprocess、boost::serialize和协议缓冲区应该是独立于平台的,因此从技术上讲,它也可以在Linux/Mac上工作

是我们1996年在Win NT上的夏延软件公司使用的用于接种防病毒的东西。这是纯RPC,没有OO层。我希望它在较新的Windows中仍然可用。

好吧,按复杂性、开销和反向速度排序,我想到了这些可能性:

  • SOAP(您已经排除了它)
  • 科尔巴
  • DCOM(DCE)
  • XML消息的交换
  • ONC-RPC(SunRPC)
  • 类HTTP消息的交换
  • 交换类似telnet的消息(面向线路)
总之,您将或多或少地准备好将库、包等用作开源

上面的一些可能听起来很奇怪,但实际上,我们经常使用HTTP或Telnet进行RPC。原因是您不需要花哨的环境来测试,任何最陌生的软件都可以轻松地适应它。这也使得您的程序的服务可以通过WebBrowser、telnet会话或其他程序轻松使用,这些程序只需打开一个套接字并发送请求即可。例如,我的大多数程序都包含一个--scripting命令行参数,它打开一个telnet端口,通过该端口,您可以通过类似JavaScript的语言发送和访问整个应用程序对象模型。这也可以用来远程控制任何应用程序非常容易-没有任何努力。如果您曾经编写过这样一个框架,那么它可以在每一个新应用程序中重复使用(请参见外观)

我必须承认,我所有的应用程序都是在一个环境中编写的,在这个环境中,上面所有的内容都已经包括在内,并且可以作为客户端和服务器使用


小结:用最简单的方法,那就是工作。您不需要Corba或SOAP,除非您的应用程序需要集成到这样的基础架构中。

这里有更多信息:
在文件夹…\samples\NetDS\RPC中安装查看示例后,获取“Microsoft Platform SDK for Windows Server 2003 R2” -源样本 -MS样本
更多链接:




旧的帮助,但有用




是的,我同意Isalamon的观点-只需使用MIDL内置的真正RPC即可。你可以得到一本关于DCE RPC的O'Reilly书。如果您在同一台计算机上,只需使用ncalrpc的绑定主机。

为共享内存映射文件解决方案提供的链接实际上是一个在windows上执行ipc的多种不同方式的列表: