I\'m writing a bot for a game, which has a C++ API interface (ie. methods in a Cpp dll get called by the game when events occur, the dll can call back methods in the game to tri
There are lots of different ways of doing IPC in Windows. For C# to C++, I'd be tempted to use Sockets as the API under both C++ (WinSock is OK once you get your head around it) and C# is pretty easy.
Named Pipes might be better though if you don't want to use sockets, and were designed specifically for IPC. The API under C++ seems pretty simple, example here.
In such occasion, I would like to see a C++/CLI party and a C# one using the .NET Framework's named pipes.
One solution is to create a managed C++ class library with regular __declspec(dllexport)
functions which call managed methods in a referenced C# class library.
Example - C++ code file in managed C++ project:
#include "stdafx.h"
__declspec(dllexport) int Foo(int bar)
{
csharpmodule::CSharpModule mod;
return mod.Foo(bar);
}
C# Module (separate project in solution):
namespace csharpmodule
{
public class CSharpModule
{
public int Foo(int bar)
{
MessageBox.Show("Foo(" + bar + ")");
return bar;
}
}
}
Note that I am demonstrating that this is an actual .NET call by using a System.Windows.Forms.MessageBox.Show
call.
Sample basic (non-CLR) Win32 console application:
__declspec(dllimport) int Foo(int bar);
int _tmain(int argc, _TCHAR* argv[])
{
std::cout << Foo(5) << std::endl;
return 0;
}
Remember to link the Win32 console application with the .lib
file resulting from the build of the managed C++ project.