2010-03-01 2 views
8

У меня есть приложение, которое использует C# для front end и C++ DLL для логической части. Я хотел бы печатать сообщения об ошибках на экране консоли из моей C++ DLL, даже если присутствует графический интерфейс C#. Пожалуйста, дайте мне знать, как это сделать.Печать сообщений на консоль из C++ DLL

Thanks, Rakesh.

ответ

8

Вы можете использовать AllocConsole() для создания окна консоли, а затем записи на стандартный вывод.

Если вы используете стандартные функции ввода-вывода C или C++ (в отличие от прямых вызовов win32), необходимо предпринять дополнительные шаги, чтобы связать новую консоль с идеей стандартной библиотеки C/C++ стандартного вывода , http://www.halcyon.com/~ast/dload/guicon.htm объясняет, что вам нужно делать и почему, с полным кодом.

+0

эй Грег, не могли бы вы продолжить использование AllocConsole(). Любые ссылки для справки? –

+0

Я добавил ссылку на документацию MSDN для AllocConsole(). Это очень просто. Просто вызовите AllocConsole(), чтобы создать консольное окно для вашего приложения и проверить возвращаемое значение, чтобы убедиться, что оно по какой-то причине не сработало. –

+0

Я использовал AllocConsole для создания окна консоли, но ничего не печаталось на экране. Любая идея, почему это происходит? –

12

Вы можете использовать OutputDebugString в C++ DLL, а затем выполнить DebugView, чтобы получить сообщения

+0

Спасибо. Работала совершенно и точно, что мне нужно. Я имею в виду, действительно, СПАСИБО. – Alyoshak

+1

Спасибо тоже. Для других: передать простую строку, выполните OutputDebugString (L "test"); – texnic

+0

Увы, у меня есть только один ответ, чтобы дать ответ. Большое спасибо! – Bjorninn

4

Если приложение не запускается из консоли, стандартный ввод, стандартный вывод и стандартный поток ошибок даже не существует, и любая попытка использовать, например, printf() не удастся. Либо откройте свою собственную консоль, либо используйте механизм отладки, такой как OutputDebugString(), предложенный ранее.

0

Если вы работаете с DLL и сервисными EXE, например COM/DCOM или любым другим проектом ATL, вы также можете использовать эту строку кода для печати диагностических сообщений в виде окон MessageBox в качестве альтернативы для печати сообщений на консоль:

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

Пример случаи, когда я использовал это включает в себя функцию _tWinmain, а также конструкторы и деструкторы для отслеживания экземпляров.

Смежные вопросы