【问题标题】:Writing to Console from DLL从 DLL 写入控制台
【发布时间】:2011-11-16 22:59:46
【问题描述】:

我有一个程序的 DLL,并且希望能够在命令行中运行该程序,然后将我的 DLL 的输出通过管道传输到另一个程序。我该怎么做?

我目前可以打开一个新的调试控制台进行打印,但我希望能够通过管道输出,以便我可以运行如下快捷方式:

C:\Windows\System32\cmd.exe /K "C:\Program_Using_the_DLL.exe | C:\Program_to_Pipe_To.exe"

这与一些类似的问题(IE:this one)不同,因为我需要能够通过管道输出,所以我需要它来到当前控制台。

也许我可以以某种方式使用 GetStdHandle(),或者是否可以使用 AttachConsole(ATTACH_PARENT_PROCESS)?任何帮助,将不胜感激!我是这个细节部分的新手。

(DLL 是用 C++ 编写的)

【问题讨论】:

  • 当您将一个程序的输出通过管道传输到另一个程序时,它不再进入控制台,因此 AttachConsole 无济于事。您需要获取父程序用于输出的文件句柄,并希望它与 C++ I/O 兼容。
  • 我看不出它为什么不能工作。你尝试过做什么?

标签: c++ dll console pipe


【解决方案1】:

尝试使用函数GetStdHandle(STD_OUTPUT_HANDLE) 获取HANDLE 到当前输出文件。

【讨论】:

  • 我如何使用该文件 HANDLE 进行编写?
  • 啊,我的愚蠢伤害了!正确答案是(当然),调用 SetStdHandle(STD_OUTPUT_HANDLE, currentConsole);其中 currentConsole 是 GetStdHandle(STD_OUTPUT_HANDLE) 返回的内容。
  • 所以,总而言之:像往常一样使用 cout
  • 另外,如果可以的话,我会投票,但我还没有足够的声誉!将尝试回答我自己的一些问题....
猜你喜欢
  • 1970-01-01
  • 2014-09-28
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多