【问题标题】:Redirect stdout+stderr on a C# GUI project在 C# GUI 项目上重定向 stdout+stderr
【发布时间】:2011-08-04 23:02:03
【问题描述】:

我有一个无法更改的非托管 dll (C++)。
如何从这个 dll 获取 STDOUT 的结果到我的 C# GUI 项目? 例如 DLL 有这样的 void:

__declspec(dllexport) void PrintMsg();

void PrintMsg()
{
cout << "Some text" << endl ;
}

我找到了这个解决方案Redirect stdout+stderr on a C# Windows service,但是所有重定向的数据都写入文件,我需要接收标准输出而不保存到输出文件,最好的选择是在变量中输出。

如果可能的话,告诉我怎么做。

谢谢。

【问题讨论】:

  • 这与 C++ 和 VB.NET 有什么关系?
  • 对不起,我忘记了这个解决方案stackoverflow.com/questions/5510285/… 非常适合我,但只工作一次,没有回答为什么:(
  • Seth,我有一个用于流式传输股票价格的非托管 dll 和用 .net 编写的主程序
  • 好的,但是删除不必要的标签,比如 VB.NET 和 C++,因为你的非托管 dll 是用什么语言编写的,或者 VB.NET 并不重要,因为它是 .NET .
  • Seth,感谢 cmets,我将问题更改为更正确并删除了一些标签。是的,你说得对,我需要将 STDOUT 从 dll 重定向到我的 .NET 程序。

标签: .net c++ dll


【解决方案1】:

我相信您应该能够调用CreateFile() 并将其传递给您的应用程序唯一的名称(不是文件名)来创建“设备”。实际上,您必须执行两次,一次用于“写作”,一次用于“阅读”,然后使用SetStdHandle 并将标准输出重定向到“写作”句柄。然后,您应该能够使用“读取”句柄来读取发送到标准输出的所有内容。我从来没有试过这个,所以你必须确切地查找如何制作一个任意的通信“设备”。

【讨论】:

    猜你喜欢
    • 2015-09-02
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 2022-01-18
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    相关资源
    最近更新 更多