当前位置:  开发笔记 > 编程语言 > 正文

C#和C++之间的进程间通信

如何解决《C#和C++之间的进程间通信》经验,为你挑选了2个好方法。

我正在为游戏编写一个机器人,它有一个C++ API接口(即当事件发生时,游戏调用Cpp dll中的方法,dll可以回调游戏中的方法来触发动作).

我真的不想用C++编写机器人,我是一个相当有经验的C#程序员,但我根本没有C++经验.因此,显而易见的解决方案是使用ipc将事件发送到C#程序,并将操作发送回C++程序,这样我在C++中编写的所有内容都是调用方法和发送事件的基本框架.

最好的方法是什么?示例代码将非常受欢迎,因为我此刻并不特别渴望学习C++!



1> mdm..:

在Windows中有很多不同的IPC方式.对于C#到C++,我很想在两个C++下使用套接字作为API(一旦你了解它就可以使用WinSock),而C#非常简单.

如果您不想使用套接字,并且专门为IPC设计,则命名管道可能会更好.C++下的API看起来很简单,例如这里.



2> Aviad P...:

一种解决方案是使用常规__declspec(dllexport)函数创建托管C++类库,该函数在引用的C#类库中调用托管方法.

示例 - 托管C++项目中的C++代码文件:

#include "stdafx.h"

__declspec(dllexport) int Foo(int bar) 
{
    csharpmodule::CSharpModule mod;
    return mod.Foo(bar);
}

C#模块(解决方案中的单独项目):

namespace csharpmodule
{
    public class CSharpModule
    {
        public int Foo(int bar)
        {
            MessageBox.Show("Foo(" + bar + ")");
            return bar;
        }
    }
}

请注意,我通过使用调用来演示这是一个实际的.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;
}

请记住将Win32控制台应用程序与.lib托管C++项目的构建所产生的文件相链接.

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有