2016-05-04 12 views
0

Ich möchte in meiner C++ - Anwendung anmelden. Ich möchte jedoch Windows (10) Event Viewer anstelle von Textdateien verwenden. Ich habe einige seltsame Anrufe entdeckt, von denen ich nicht einmal weiß, was die Parameter bedeuten - ReportEvent, OpenEventLog und einige andere Event Logging functions. Ich kann verwalteten Code auch nicht verwenden, da meine App eingeschränkt ist.Log auf Ereignisanzeige unter Windows mit C++

Ich habe auch versucht, den Code auf diesem link zu verwenden, aber ich bekomme Kompilierungsfehler (Namespace 'System' undefined - es scheint einige Include-Dateien fehlen ...).

Ich fand keinen Beispielcode, der noch funktioniert.

Ich würde gerne einen Beispielcode, wenn möglich - nur eine einfache Protokollierung von einer lokalen Anwendung, in nicht verwalteten C++ gebaut. Kann jemand helfen?

+2

Sobald Sie den Namespace 'System' sehen, sind Sie in das verwaltete Land hineingelaufen und können nach nicht verwalteten Code-Beispielen Ausschau halten. – user4581301

+0

Danke, ich wusste das nicht - ich fand das wirklich komisch –

+0

Versuchen Sie, die Dokumentation zu lesen. –

Antwort

5

Ihr Link nicht kompilieren, weil das ist verwaltet C++ (beachten Sie die Verwendung von gcnew)

Wenn alles, was Sie schreiben wollen, sind Strings ist es einfach, alles was Sie brauchen ist RegisterEventSource und ReportEvent.

Es ist etwa so:

const char* custom_log_name = "MyLogName"; 

// create registry keys for ACLing described on MSDN: http://msdn2.microsoft.com/en-us/library/aa363648.aspx 

HANDLE event_log = RegisterEventSource(NULL, custom_log_name); 
const char* message = "I'm in an event log"; 
ReportEvent(event_log, EVENTLOG_SUCCESS, 0, 0, NULL, 1, 0, &message, NULL); 

Auf diese Weise können nur für die Protokollierung Saiten. Viel komplexeres (und nützlicheres) Logging ist möglich, aber es ist ziemlich direkt in C++ involviert. Wenn Sie verwalteten Code für Ihre Protokollierungskomponente schreiben können, ist die Handhabung einfacher.

+1

In meinem Fall musste ich schreibe 'LPCWSTR custom_log_name = L" MyLogName ";' und 'LPCWSTR message = L" Ich bin in einem Ereignisprotokoll ";' anstelle von 'const char *' –