如何从c++主应用程序返回值到c# GUI应用程序
How to return value from C++ main application to C# GUI application?
我想知道如何做到这一点?例如,如果在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++应用程序中,你的应用程序应该退出还是不退出?如果你的应用程序在错误发生时退出:
- 在你的c++代码中,当错误发生时使用"exit(errorCode)", errorCode是一个整数
- 在c#应用程序中,为执行c++ exe的进程注册退出事件的处理程序(确保进程上的EnableRaisingEvents设置为true)。
- 在事件处理程序中读取运行c++ exe的进程对象的"ExitCode"。
,但是如果在你的c++应用程序中,你处理错误,只是想通知GUI,一个解决方案是:
- 当错误发生时,在c++应用程序中
- 将错误写入一个文件
- 在c#应用程序中,我们创建一个线程来读取这个文件,当文件的内容被改变时,发送一个事件给主线程。
注意:对于两个进程之间的通信有不止一种方式,可以通过此文本帮助您:http://en.wikipedia.org/wiki/Inter-process_communication
相关文章:
- 程序不向函数返回值
- C++检查应用程序中的文本框值
- 返回主窗口/ C ++后,应用程序正在关闭
- 将数组作为多线程应用程序中函数的返回传递
- 参数传递和返回值如何在程序集级别的 x86 上的 C/C++ 中工作?
- DoModal 主应用程序随机返回 -1 代码
- 将值从C 应用程序传递到C#应用程序
- 程序返回-1073741571而不是永远进行的值
- 有没有办法在C++应用程序的多次执行中保存值?
- C++ Argv[1] 终止程序,返回值 9009
- C - 程序返回值而无需返回语句
- 当 C++11 应用程序使用非 C++11 库时返回值损坏
- 如何将命令从c++应用程序返回到父终端
- 从 MFC(c++) 应用程序启动的可执行 jar 中获取返回值
- 这是从信号处理程序返回值的可靠方法吗
- 启动 VirtualBoxSDK 测试应用程序返回错误"Error creating virtual box instance"
- 控制台应用程序返回一个奇怪的值
- 如何从c++主应用程序返回值到c# GUI应用程序
- 字符串比较返回值(Is用于对字符进行排序的应用程序?)
- 在哪种情况下,将限制限定符应用于返回值才会起作用