Стандартное решение этой проблемы состоит в том, чтобы записать небольшую программу, которая проверяет размеры всех международных типов (короткое целое, интервал, длинное целое) и сравнивает их с void*. Если существует соответствие, оно испускает часть кода, который определяет тип intptr. Можно поместить это в заголовочный файл и использовать новый тип.
просто включать этот код в процесс сборки (использующий make
, например)
TEventLogger
- это внутренний вспомогательный класс для TService
.
Вы регистрируете сообщение с помощью функции TService.LogMessage ()
, а не путем прямого вызова TEventLogger
. Параметры LogMessage ()
напрямую совпадают с параметрами функции Win32 API ReportEvent ()
.
Подробности см. В документации Win32 API.
Если да, не писать служебное приложение,
Простой пример записи приложения в журнал событий:
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 = для получить это описание; см. справку и поддержку. В Следующая информация является частью события: * Бла-Бла-Бла *.