Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IPC:Qt和MONO进程之间的通信(在linux上)_C#_Mono_Qt4_Ipc - Fatal编程技术网

C# IPC:Qt和MONO进程之间的通信(在linux上)

C# IPC:Qt和MONO进程之间的通信(在linux上),c#,mono,qt4,ipc,C#,Mono,Qt4,Ipc,我必须将Qt4应用程序连接到mono应用程序。当前的概念验证使用网络套接字,这很好,我可以在命令行上使用nc进行调试 但我愿意接受新的建议。我的选择是什么 编辑: 原始应用程序堆栈分为两部分:服务器+客户端。客户应该展示图片和视频。因为我们发现这在Mono中是不可能的,所以我们将客户端分为两部分: 服务器->客户端->GUI 在最初的实现中,客户机+GUI是同一个应用程序。现在客户端是在Mono上运行的C语言,GUI是Qt4。在Qt4中重写客户端不是一个选项 现在,客户端和GUI之间的通信是通过

我必须将Qt4应用程序连接到mono应用程序。当前的概念验证使用网络套接字,这很好,我可以在命令行上使用nc进行调试

但我愿意接受新的建议。我的选择是什么

编辑:

原始应用程序堆栈分为两部分:服务器+客户端。客户应该展示图片和视频。因为我们发现这在Mono中是不可能的,所以我们将客户端分为两部分:

服务器->客户端->GUI

在最初的实现中,客户机+GUI是同一个应用程序。现在客户端是在Mono上运行的C语言,GUI是Qt4。在Qt4中重写客户端不是一个选项

现在,客户端和GUI之间的通信是通过本地主机使用TCP套接字完成的。我正在寻找更好的实现

编辑2:
虽然该应用程序目前在linux上运行,但我希望该系统也能在windows上运行。具有侦听套接字的客户端。。。在Win32上工作,Qt4是跨平台的。

您可以使用Qyoto用C编写完整的项目,您不需要用两种不同的语言编写代码,在C中访问本机api是一项非常复杂的任务,而且需要花费大量时间

您可以使用,其中C绑定用于Qt。MonoDevelop有一个Qyoto加载项,名为。

您可以:

在你的C++ QT 4应用程序中嵌入MNO。 通过从GUI公开一个C API来反转1,这样您就可以使用P/Invoke从Mono代码控制它。 混合使用1和2-嵌入Mono,使用嵌入API调用它,使用P/invoke回调它。 使用其他IPC机制,如Unix套接字或共享内存,它们可能会更快,并且可以避免阻塞IP端口。
我推荐3个。

由于你没有回答我的问题,我对此投了反对票。问题是,原来的应用程序是用C/win32编写的,现在linux端口除了GUI之外还能工作。Noe客户端将GUI应用程序分为两部分,一部分是后端,与服务器对话,另一部分是我正在编写的GUI。他们不想接触后端-我接受这个决定。现在,我的问题是后端和前端之间的通信。您必须指定这一问题。后端是用哪种语言编写的?你有没有用MOMA检查过你的应用程序?我不认为Qt的事件循环会像在单声道进程中一样。另一方面也一样,是否在任何地方记录了这一点?既然这已经被测试过了,那又有什么关系呢?只要把它想象成从C/C++调用Mono方法和从Mono调用C函数。当然,可以用MNO方法阻塞主循环,但是可以用C++函数来阻塞它,就像TCP IPC一样。Qyoto从Mono运行QT mainloop,GTK从Mono运行GTK mainloop,等等。我假设这是可能的,但这意味着在同一个应用程序中混合两个不同的子域。我对此不满意,请看我在Sharique给Qoyoto项目写的回复。我认为4是最好的方式……只要在两个语言域之间有一个干净、定义良好的接口,我看不出使用IPC有什么不同。它会快得多,而且你也不会因为运行两个进程而头痛。为了理解它与IPC的相似性,考虑定义一个C方法字节[]MaCeCalBy[]数据。你的C++代码将得到一个单字节的句柄,然后对于每个调用,你会将参数编码成一个单元格,调用单声道,并解码得到的单元格。这与同步网络IPC没有太大区别。是的,它确实看到: