2010-03-01 30 views
8

Tôi có một ứng dụng sử dụng C# cho giao diện người dùng và C++ DLL cho phần logic. Tôi muốn in thông báo lỗi trên màn hình console từ C++ DLL của tôi ngay cả khi C# GUI có mặt. Xin vui lòng cho tôi biết làm thế nào để làm điều này.In tin nhắn tới bàn điều khiển từ C++ DLL

Xin cảm ơn, Rakesh.

Trả lời

8

Bạn có thể sử dụng AllocConsole() để tạo cửa sổ bảng điều khiển và sau đó ghi vào đầu ra tiêu chuẩn.

Nếu bạn đang sử dụng các hàm I/O chuẩn C hoặc C++ (trái với các cuộc gọi win32 trực tiếp), có một số bước bổ sung bạn cần thực hiện để kết hợp bàn điều khiển mới với ý tưởng đầu ra tiêu chuẩn của thư viện chuẩn C/C++ . http://www.halcyon.com/~ast/dload/guicon.htm giải thích những gì bạn phải làm và tại sao, với mã hoàn chỉnh.

+0

hey Greg, bạn có thể mở rộng sử dụng AllocConsole() hay không. Bất kỳ liên kết nào để tham khảo? –

+0

Tôi đã thêm một liên kết đến tài liệu MSDN cho AllocConsole(). Nó rất đơn giản. Chỉ cần gọi AllocConsole() để tạo một cửa sổ giao diện điều khiển cho ứng dụng của bạn và kiểm tra giá trị trả về để đảm bảo nó không bị lỗi vì một lý do nào đó. –

+0

Tôi đã sử dụng AllocConsole để tạo cửa sổ bảng điều khiển nhưng không có gì được in trên màn hình. Bất kỳ ý tưởng tại sao điều này đang xảy ra? –

12

Bạn có thể sử dụng OutputDebugString trong C++ DLL, và sau đó thực hiện DebugView để có được các thông điệp

+0

Cảm ơn. Làm việc hoàn hảo và chính xác những gì tôi cần. Ý tôi là, THANKS. – Alyoshak

+1

Cảm ơn tôi. Đối với những người khác: để vượt qua một chuỗi đơn giản, làm OutputDebugString (L "test"); – texnic

+0

Than ôi, tôi chỉ có một ưu tiên để đưa ra câu trả lời này. Cảm ơn rất nhiều! – Bjorninn

4

Trừ khi ứng dụng được bắt đầu từ một giao diện điều khiển, stdin, stdout, và stderr thậm chí sẽ không tồn tại và bất kỳ nỗ lực để sử dụng ví dụ printf() sẽ không thành công. Mở bảng điều khiển của riêng bạn hoặc sử dụng cơ chế gỡ lỗi như OutputDebugString() được đề xuất trước đó.

0

Nếu xử lý các tệp DLL và EXE dịch vụ như COM/DCOM hoặc bất kỳ dự án ATL nào khác, bạn cũng có thể sử dụng dòng mã này để in ra các thông báo chẩn đoán dưới dạng MessageBox cửa sổ thay thế cho in thư tới bảng điều khiển:

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

trường hợp ví dụ mà tôi đã sử dụng này bao gồm các _tWinmain chức năng, cũng như constructor và destructor để theo dõi các trường hợp.

Các vấn đề liên quan