C#和C+之间的进程间通信+; 我写了一个游戏的BOT,它有一个C++ API接口(例如,在事件发生时,游戏调用的CPP DLL中的方法,DLL可以调用游戏中的方法来触发动作)。 我不想在C++中写我的BT,我是一个相当有经验的C程序员,但我根本没有C++经验。因此,显而易见的解决方案是使用IPC将事件发送到C++程序,并将动作发送回C++一个,这样我需要在C++中编写的是调用方法和发送事件的基本框架。

C#和C+之间的进程间通信+; 我写了一个游戏的BOT,它有一个C++ API接口(例如,在事件发生时,游戏调用的CPP DLL中的方法,DLL可以调用游戏中的方法来触发动作)。 我不想在C++中写我的BT,我是一个相当有经验的C程序员,但我根本没有C++经验。因此,显而易见的解决方案是使用IPC将事件发送到C++程序,并将动作发送回C++一个,这样我需要在C++中编写的是调用方法和发送事件的基本框架。,c#,.net,c++,ipc,C#,.net,C++,Ipc,最好的方法是什么?样本代码将非常感谢,因为我没有特别的愿望学习C++在这一点! 在这种情况下,我希望看到一个C++/CLI参与方和一个使用.NET Framework命名管道的C#参与方。有。对于C++到C++,我会尝试使用套接字作为C++下的API(WinSock只要一开始就可以),C很容易。 不过,如果您不想使用专门为IPC设计的套接字,可能会更好。C++下的API看起来很简单,例如.< /p> < P>一个解决方案是创建一个托管C++类类库,它使用常规的代码>

最好的方法是什么?样本代码将非常感谢,因为我没有特别的愿望学习C++在这一点! 在这种情况下,我希望看到一个C++/CLI参与方和一个使用.NET Framework命名管道的C#参与方。

有。对于C++到C++,我会尝试使用套接字作为C++下的API(WinSock只要一开始就可以),C很容易。
不过,如果您不想使用专门为IPC设计的套接字,可能会更好。C++下的API看起来很简单,例如.< /p> < P>一个解决方案是创建一个托管C++类类库,它使用常规的代码> <托管C++项目中的示例-C++代码文件:

#include "stdafx.h"

__declspec(dllexport) int Foo(int bar) 
{
    csharpmodule::CSharpModule mod;
    return mod.Foo(bar);
}
C#模块(解决方案中的单独项目):

注意,我通过使用
System.Windows.Forms.MessageBox.Show
调用来演示这是一个实际的.NET调用

基本(非CLR)Win32控制台应用程序示例:

__declspec(dllimport) int Foo(int bar);

int _tmain(int argc, _TCHAR* argv[])
{
    std::cout << Foo(5) << std::endl;
    return 0;
}
\uu declspec(dllimport)intfoo(intbar);
int _tmain(int argc,_TCHAR*argv[]
{

STD::在同一台机器上的CUT IPC绝对是一个命名管道的例子,套接字是次优的。我已经有一个使用命名管道的基本版本,但是它阻止了游戏崩溃。我感觉异步IO会推我的C++能力太多:/AsioC IO不应该太难,我确信你可以使用管道。没有阻塞。如果没有,那就准备一个漫长的夜晚!@Aviad:是的,插座可能没有那么好,但我想提供一个与Aggelo的答案略有不同的答案:)好的,有一种方法“PeekNamedPipe”这会告诉你管道中有多少数据,但这似乎也会阻塞:/I我看不到任何其他方法可以做到这一点,除了使用asynch。我想我必须这样做:/-在快速搜索之后,发现它是用C#实现的,但这让你很好地了解如何使用管道实现简单的异步IPC。是的。我已经使用管道编写了一个阻塞版本。但是没有一个游戏调用被允许阻止的方法——我认为异步ipc会有点推动它。老实说,我希望已经编写的某种框架或库可以使用,因为我只想做非常基本的ipc
__declspec(dllimport) int Foo(int bar);

int _tmain(int argc, _TCHAR* argv[])
{
    std::cout << Foo(5) << std::endl;
    return 0;
}