我有一个 C++ dll 通过使用 printf 或 cout 的控制台输出报告许多有用的信息。我正在将此 dll 链接到我用 MFC 编写的 GUI 应用程序,并希望访问它的输出。
听起来很简单,是吗?好吧,经过数小时的互联网搜索并实施了几种解决方案,但都没有奏效,我感到很惊讶!
所以可能需要一些关于应用程序的额外信息。我有一个巨大的主机应用程序,我无权访问。实际上,我正在为它编写插件。它在运行时链接我的插件 dll(我想使用 LoadLibrary())。我的 dll 反过来使用我想要获取的输出的外部 dll。这个 dll 通过相应的 lib 文件静态链接到我的,所以 CRT 完成所有加载。
据我所知,任何应用程序(包括所有以任何方式加载的 dll)都有单个标准输出流(单个标准输入和单个标准错误)。那时事情对我来说太复杂了。我试图重定向这个标准输出流(显然,对于整个应用程序/进程),在某些情况下它适用于我的 dll,但它仍然不适用于外部 dll。即,如果我使用cout << "Hey!";
来自我的 dll 之类的东西,我可以在我已将流重定向到的文件中看到它。但是,来自外部 dll 内部的相同调用(是的,我有它的来源,但我真的不想更改它们)什么也没做。天知道这个输出是在哪里完成的。
我试过了:
- 好老
freopen()
把戏。为我的 dll 工作,对外部 dll 没有影响。 - WinAPI
SetStdHandle()
调用。根本不起作用。好像win7有点问题。 AllocConsole()
+_open_osfhandle()
. 与 1 相同。在控制台中查看我的输出,看不到外部 dll 的输出。cout.rdbuf()
重新分配。与 3 相同,但仅适用于 cout。
好吧,伙计们,我真的需要帮助。好像我被卡住了:-/
附加信息:
主机应用程序、我的 dll 和外部 dll 是使用 MSVS'05 开发的。所有 dll 都有“在静态库中使用 MFC”设置。测试是在 Win7 x64 下进行的。我确实有所有来源,但我无权更改它们。