gpt4 book ai didi

c# - 如何使 C# 控制台实用程序附加到 C++ exe?

转载 作者:行者123 更新时间:2023-11-30 01:30:01 24 4
gpt4 key购买 nike

我有一个 Win32 C++ 游戏端项目,我想创建一个可以动态附加的 C# 进程。然后 C++ 进程可以将调试数据发送到 C# 进程,C# 控制台可以将调试命令发送到 C++ 进程。我知道这是可以做到的,但我不确定该怎么做。有人知道吗?

最佳答案

有很多方法可以进行跨进程通信。出于您的目的,我建议您使用套接字在两者之间进行通信,因为如果您愿意,这也将允许您在机器之间进行通信;两种语言中使用套接字的语义相似。

在 C# 端,您可以通过使用 System.Net.Sockets 中的 SocketTcpClient 类开始使用 Sockets。此外,您可能会发现在 C# 进程中实现服务器/监听端更容易一些。

TcpClient Class @ MSDN
Socket Class @ MSDN
System.Net.Sockets Namespace @ MSDN

在 C++ 端,您有两种利用套接字的方法,即通过 WinSock 函数或 Unix/POSIX 样式函数。

Getting Started with Winsock @ MSDN

Winsock Functions @ MSDN

请注意,WSA**** 函数是正式的 WinSock 函数,select/listen/bind/... 是传统的 Unix/POSIX 风格的。您可以使用一套或另一套。

TCP 套接字可能是您最好的选择;但您可能会发现 UDP 可以让您更快上手。此外,您还可以使用 UDP 多播做一些有趣的事情。如果您使用套接字,请不要忘记检查您的防火墙设置。

两者之间的其他可能沟通方式涉及您可能需要学习的不同工作量和领域知识。以下是优缺点的简要概述。

命名管道

优点:同机性能优异,C++易于控制。
缺点:难以跨机器边界使用。

COM 应用服务器

优点:易于在 C# 端使用。创建后,易于在 C++ 端进行扩展。
缺点:可能难以调试,并且很难向现有项目添加支持。还容易出现 COM 注册和调试问题。很难学会跨机器和用户 session 边界使用。

共享内存

优点:性能极佳,在 C++ 中易于控制,在 C# 中易于控制。
缺点:不能跨机器使用。在跨进程共享缓冲区方面有怪癖,尽管您始终可以为每一方创建一个缓冲区,并为缓冲区进行单向通信。如果您的应用之间的通信超过 1:1,这将很难使用。

关于c# - 如何使 C# 控制台实用程序附加到 C++ exe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5113507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com