2010-03-01 162 views
8

我有一个应用程序,它使用C#作为前端,C++ DLL作为逻辑部分。即使C#GUI存在,我也想从C++ DLL的控制台屏幕上打印错误消息。请让我知道如何做到这一点。从C++ DLL打印消息到控制台

谢谢, Rakesh。

回答

8

您可以使用AllocConsole()创建控制台窗口,然后写入标准输出。

如果您正在使用C或C++标准I/O功能(而不是直接Win32调用),还有你需要采取与标准输出的C/C++标准库的想法新的控制台关联的一些额外的步骤。 http://www.halcyon.com/~ast/dload/guicon.htm解释你必须做什么以及为什么,完整的代码。

+0

嘿格雷格,请问您可以扩展使用AllocConsole()。任何链接供参考? – 2010-03-01 06:37:13

+0

我添加了一个指向AllocConsole()的MSDN文档的链接。这很简单。只需调用AllocConsole()为您的应用程序创建一个控制台窗口,并检查返回值以确保它不会由于某种原因而失败。 – 2010-03-01 21:38:19

+0

我用AllocConsole来创建一个控制台窗口,但是没有任何东西被打印在屏幕上。任何想法为什么发生这种情况? – 2010-03-02 08:58:08

12

可以在C++ DLL使用OutputDebugString的,然后执行DebugView除非应用程序从一个控制台开始得到消息

+0

谢谢。完美工作,正是我需要的。我的意思是,真的,谢谢。 – Alyoshak 2012-07-12 16:08:31

+1

也谢谢我。对于其他人:传递一个简单的字符串,做OutputDebugString(L“test”); – texnic 2014-07-23 14:22:23

+0

唉,我只有一个upvote来给这个答案。非常感谢! – Bjorninn 2015-10-06 12:56:58

4

,标准输入,标准输出,和标准错误甚至不会存在,使用例如任何企图printf()将会失败。要么打开您自己的控制台,要么使用调试机制,比如前面提到的OutputDebugString()

0

如果处理COM/DCOM或任何其他ATL项目的DLL和服务EXE,您也可以使用以下代码行以MessageBox窗口的形式打印诊断消息,作为将消息打印到控制台的替代方法:

MessageBox(NULL, L"Com Object Function Called", L"COMServer", MB_OK | MB_SETFOREGROUND);

实施例情况下,我已经使用这个包括_tWinmain功能,以及构造和析构跟踪实例。