如何从c++主应用程序返回值到c# GUI应用程序

How to return value from C++ main application to C# GUI application?

本文关键字:应用程序 返回值 GUI c++      更新时间:2023-10-16

我想知道如何做到这一点?例如,如果在c++主应用程序中发生异常,如何向GUI应用程序发送一些内容?

如果c# GUI应用程序启动了c++控制台应用程序,则后者的退出代码 (main()函数的返回值)可以被前者访问,参见这里的示例:Process.ExitCode。一般解决方案是使用某种形式的进程间通信 (IPC)。Windows示例:这里和这里

假设这两个应用程序在c++ &c#是不同的进程,你不能那样做。(但是您可以返回一个错误代码-在0到255之间- exit在子进程中,waitpid在父进程中得到它)。

但是(至少在Linux上)您可以有一个文本双向通道(在Linux上,使用命名或匿名管道,或AF_UNIX套接字),并在两个进程之间定义一个协议。

一种方法是使用WCF服务。我最近在一台机器上编写了一个c# GUI,需要与另一台机器上的c++/CLI应用程序进行通信,我只是通过WCF交换信息(包括错误消息),它在一台机器上运行同样良好。此外,这种方法为您提供了学习WCF的借口。

对于我来说,如果异常发生在你的c++应用程序中,你的应用程序应该退出还是不退出?如果你的应用程序在错误发生时退出:

  1. 在你的c++代码中,当错误发生时使用"exit(errorCode)", errorCode是一个整数
  2. 在c#应用程序中,为执行c++ exe的进程注册退出事件的处理程序(确保进程上的EnableRaisingEvents设置为true)。
  3. 在事件处理程序中读取运行c++ exe的进程对象的"ExitCode"。

,但是如果在你的c++应用程序中,你处理错误,只是想通知GUI,一个解决方案是:

    当错误发生时,在c++应用程序中
  1. 将错误写入一个文件
  2. 在c#应用程序中,我们创建一个线程来读取这个文件,当文件的内容被改变时,发送一个事件给主线程。

注意:对于两个进程之间的通信有不止一种方式,可以通过此文本帮助您:http://en.wikipedia.org/wiki/Inter-process_communication