Subversion Repositories simple_log_event

Rev

Rev 3 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 daniel-mar 1
unit ViaThinkSoftSimpleLogEvent_Impl;
2
 
3
{$WARN SYMBOL_PLATFORM OFF}
4
 
5
interface
6
 
7
uses
8
  ComObj, ActiveX, ViaThinkSoftSimpleLogEvent_TLB, StdVcl;
9
 
10
type
11
  TViaThinkSoftSimpleEventLog = class(TAutoObject, IViaThinkSoftSimpleEventLog)
12
  protected
13
    procedure LogEvent(EventType: Integer; const LogMsg: WideString); safecall;
14
  end;
15
 
16
const
17
  LOGEVENT_PROVIDER_NAME = 'ViaThinkSoft';
18
 
19
implementation
20
 
21
uses ComServ, Windows;
22
 
23
const
24
  MSG_SUCCESS        = $20000000;
25
  MSG_INFORMATIONAL  = $60000001;
26
  MSG_WARNING        = $A0000002;
27
  MSG_ERROR          = $E0000003;
28
 
29
function WriteEventLog(AProvider: string; AEventType: word; AEventId: Cardinal; AEntry: string): boolean;
30
var
31
  EventLog: integer;
32
  P: Pointer;
33
begin
34
  Result := False;
35
  P := PChar(AEntry);
36
  EventLog := RegisterEventSource(nil, PChar(AProvider));
37
  if EventLog <> 0 then
38
  try
39
    ReportEvent(EventLog, // event log handle
40
          AEventType,     // event type
41
          0,              // category zero
42
          AEventId,       // event identifier
43
          nil,            // no user security identifier
44
          1,              // one substitution string
45
          0,              // no data
46
          @P,             // pointer to string array
47
          nil);           // pointer to data
48
    Result := True;
49
  finally
50
    DeregisterEventSource(EventLog);
51
  end;
52
end;
53
 
54
procedure TViaThinkSoftSimpleEventLog.LogEvent(EventType: Integer;
55
  const LogMsg: WideString);
56
begin
57
  case EventType of
58
    0:
59
      WriteEventLog(LOGEVENT_PROVIDER_NAME, EVENTLOG_SUCCESS,          MSG_SUCCESS,       LogMsg);
60
    1:
61
      WriteEventLog(LOGEVENT_PROVIDER_NAME, EVENTLOG_INFORMATION_TYPE, MSG_INFORMATIONAL, LogMsg);
62
    2:
63
      WriteEventLog(LOGEVENT_PROVIDER_NAME, EVENTLOG_WARNING_TYPE,     MSG_WARNING,       LogMsg);
64
    3:
65
      WriteEventLog(LOGEVENT_PROVIDER_NAME, EVENTLOG_ERROR_TYPE,       MSG_ERROR,         LogMsg);
66
    else
67
      // TODO: Exception/Error ?
68
  end;
69
end;
70
 
71
initialization
72
  TAutoObjectFactory.Create(ComServer, TViaThinkSoftSimpleEventLog, Class_ViaThinkSoftSimpleEventLog,
73
    ciMultiInstance, tmApartment);
74
end.