在Windows中有很多不同的IPC方式.对于C#到C++,我很想在两个C++下使用套接字作为API(一旦你了解它就可以使用WinSock),而C#非常简单.
如果您不想使用套接字,并且专门为IPC设计,则命名管道可能会更好.C++下的API看起来很简单,例如这里.
一种解决方案是使用常规__declspec(dllexport)
函数创建托管C++类库,该函数在引用的C#类库中调用托管方法.
示例 - 托管C++项目中的C++代码文件:
#include "stdafx.h"
__declspec(dllexport) int Foo(int bar)
{
csharpmodule::CSharpModule mod;
return mod.Foo(bar);
}
Run Code Online (Sandbox Code Playgroud)
C#模块(解决方案中的单独项目):
namespace csharpmodule
{
public class CSharpModule
{
public int Foo(int bar)
{
MessageBox.Show("Foo(" + bar + ")");
return bar;
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我通过使用调用来演示这是一个实际的.NET System.Windows.Forms.MessageBox.Show
调用.
示例基本(非CLR)Win32控制台应用程序:
__declspec(dllimport) int Foo(int bar);
int _tmain(int argc, _TCHAR* argv[])
{
std::cout << Foo(5) << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
请记住将Win32控制台应用程序与.lib
托管C++项目的构建所产生的文件相链接.