Subversion Repositories simple_log_event

Rev

Rev 3 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  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.
  75.