Какой-либо свет для TEventLogger?

Стандартное решение этой проблемы состоит в том, чтобы записать небольшую программу, которая проверяет размеры всех международных типов (короткое целое, интервал, длинное целое) и сравнивает их с void*. Если существует соответствие, оно испускает часть кода, который определяет тип intptr. Можно поместить это в заголовочный файл и использовать новый тип.

просто включать этот код в процесс сборки (использующий make, например)

5
задан Community 23 May 2017 в 12:24
поделиться

2 ответа

TEventLogger - это внутренний вспомогательный класс для TService .

Вы регистрируете сообщение с помощью функции TService.LogMessage () , а не путем прямого вызова TEventLogger . Параметры LogMessage () напрямую совпадают с параметрами функции Win32 API ReportEvent () .

Подробности см. В документации Win32 API.

Если да, не писать служебное приложение,

8
ответ дан 18 December 2019 в 11:59
поделиться

Простой пример записи приложения в журнал событий:

procedure WriteToLog(Msg:string; EventId: Word = 0);
var
  h: THandle;
begin
  h := RegisterEventSource(nil, PChar(Application.ExeName));
  if h > 0 then
  try
    ReportEvent(h, 0, 0, EventId, nil, 1, 0, @Msg, nil);
  finally
    DeregisterEventSource(h);
  end;
end;

procedure TForm7.Button1Click(Sender: TObject);
begin
  WriteToLog('* Blah Blah Blah *');
end;

Но учтите, что не регистрация EventID в системе приведет к путанице такого рода Описание:

Описание для события с кодом (0) в источнике (C: \ Documents и Настройки \ fgaillard \ Мои документы \ RAD Studio \ Projects \ Project1.exe) Не может быть найдено. На локальном компьютере может не быть необходимого информация реестра или файлы DLL сообщений для отображения сообщений из удаленный компьютер. Вы можете использовать флаг / AUXSOURCE = для получить это описание; см. справку и поддержку. В Следующая информация является частью события: * Бла-Бла-Бла *.

7
ответ дан 18 December 2019 в 11:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: