【发布时间】:2013-05-11 19:07:21
【问题描述】:
作为开始我的问题之前的快速说明,我对 C++ 尤其是 DLL 还是很陌生。
我目前正在 VS2012 中编写 C++ DLL,用于程序。请注意,我没有特定程序的源代码访问权限。 当相关程序要求执行某些操作时,我想将一些输出从 DLL 写入单独的控制台窗口。
我的问题是,我将如何去做这样的事情?为了明确我想要什么,我希望在 DLL 附加到程序后立即打开一个单独的控制台窗口,然后让它将输出写入控制台。当 DLL 与程序分离时,它也应该关闭控制台窗口。
到目前为止,我的猜测是在我的解决方案中创建一个单独的 Win32 控制台应用程序项目,然后可能在我的 DLL 中引用它,并让它从中执行某些方法,输出包含在调用的参数中。我不知道该怎么做,特别是因为我希望这个单独的控制台项目包含在同一个 DLL 中。
感谢您的任何意见。
【问题讨论】:
-
如果您还没有打开控制台,
AllocConsole会给您一个控制台。不知道这是否适用于 DLL。 -
当我对此进行一些谷歌搜索时,我确实看到了
AllocConsole,但我不知道如何以我想要的方式实现它。 (正如我所说,我对 c++ 还很陌生,关于这个主题的 MSDN 文档不是很广泛) -
嗯,msdn 说
AllocConsole initializes standard input, standard output, and standard error handles for the new console,所以你可能只使用std::cout。但我从来没有这样做过,所以不知道它是否有效。 -
我认为你不能使用 cout,因为它是一个 DLL。
-
使用 AllocConsole 的每个进程只能打开一个控制台。这意味着,如果您尝试在 dll 中调用 AllocConsole,而调用进程已经有一个,它将失败。我能看到这项工作的唯一方法是在 dll 中创建一个新进程。不过我很好奇,为什么你不能只写一个日志文件?
标签: c++ visual-c++ dll console