【问题标题】:Communication between two application( one in Qtc++ and another in C#)两个应用程序之间的通信(一个在 Qtc++ 中,另一个在 C# 中)
【发布时间】:2012-02-20 09:21:01
【问题描述】:

我需要与两个应用程序进行通信,一个在 Qt c++ 中,另一个在 C# 中。 原理是C#应用启动Qt应用,Qt返回值给C#应用。 最好的方法是什么?

盖特

P.S:我是 C++ 初学者,C# 中级

【问题讨论】:

    标签: c# c++ communication


    【解决方案1】:

    这里有几个选项。

    如果返回的值可以放入整数,那么您绝对应该使用 Qt 进程的ExitCode

    如果返回的值比较复杂,那就得写一个比较复杂的IPC系统(Inter Process Communication)。也有几种选择:

    • 写入平面文本文件,然后在 C# 应用程序中读取它
    • 将消息添加到队列(例如 MSMQ),然后在 C# 应用程序中读取它
    • 在 C# 应用程序中托管 Web 服务,并从 Qt 应用程序中调用它(使用 WCF 可以轻松地托管 Web 服务)
    • 使用命名管道

    【讨论】:

    • 感谢您的回复。我的变量实际上更复杂,我已经考虑过平面文本文件,但我需要在每次修改后迅速通知,所以有可能知道文本文件是否已被事件更改?否则,是否可以创建 Qt Dll 并将其与我的程序 C# 一起使用?我对 MSMQ 不熟悉,但我会了解更多相关信息,我相信 Web 服务对我的应用程序来说意义重大,但这是个好主意
    • 您可以编写一些代码以在文本文件更改时收到通知(基于事件)(在 .Net 中:请参阅FileSystemWatcher),但这是一种退出缓慢/低效的方法。而且您必须处理文件的并发读/写,这可能很棘手。 MSMQ 是一种很好的方法(面向消息的方法),因此您可以让 Qt 进程在队列中发布消息,而 C# 进程在消息在队列中可用时将它们出列(使用通知系统,而不是轮询)。您还应该能够使用 P/Invoke 在 C# 程序中使用 Qt dll。
    • 是的,感谢您提供此解决方案,我不需要对此交互进行很好的优化,并且 FileSystemWatcher 对我来说是更快的解决方案开发。当我对 MSMQ 有更多了解后,我会改变它
    猜你喜欢
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多