我有一个Win32 C++游戏方项目,我想创建一个可动态附加的C#进程.然后,C++进程可以将调试数据发送到C#进程,C#控制台可以将调试命令发送到C++进程.我知道这可以做到,但我不知道该怎么做.谁知道?
有很多方法可以进行跨进程通信.出于您的目的,我建议您使用套接字在两者之间进行通信,因为如果您愿意,这也允许您在机器之间进行通信; 并且使用套接字的语义在两种语言中都是相似的.
在C#Side,您可以使用System.Net.Sockets中的Socket或TcpClient类来开始使用套接字.此外,您可能会发现在C#进程中实现服务器/侦听端更容易一些.
TcpClient类@ MSDN
套接字类@ MSDN
System.Net.Sockets命名空间@ MSDN
在C++方面,您有两种利用套接字的方法,可以通过WinSock函数或Unix/POSIX样式函数.
请注意,WSA****函数是正式的WinSock函数,而select/ listen/ bind/ ...是传统的Unix/POSIX函数.您可以使用一组或另一组.
TCP套接字可能是你最好的选择; 但您可能会发现UDP可以让您更快地开始使用.此外,您可能会使用UDP多播做有趣的事情.如果使用套接字,请不要忘记检查防火墙设置.
两者之间的其他可能的沟通方式涉及您可能需要学习的不同数量的工作和领域知识.以下是优点和缺点的简要概述.
命名管道
优点:在同一台机器上具有出色的性能,易于用C++控制.
缺点:跨机器边界难以使用.
COM Application Server
优点:易于在C#端消费.一旦创建,就可以在C++端轻松扩展.
缺点:可能难以调试,并且添加对现有项目的支持很棘手.也容易出现COM注册和调试问题.难以学习跨机器和用户会话边界使用.
共享内存
优点:性能卓越,C++易于控制,C#中易于控制.
缺点:不能跨机器使用.虽然您总是可以为每一方创建一个缓冲区,并为缓冲区进行单向通信,但是在跨进程共享缓冲区方面存在问题.如果您的应用之间的通信超过1:1,则使用起来很棘手.
| 归档时间: |
|
| 查看次数: |
294 次 |
| 最近记录: |