Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > ReadEventLog()


Автор: aNGELO 26.5.2007, 19:08
есть пример, хоть и не про евентлог, но по сути работать должно также:

Код

...
function EnumServicesStatus(hSCManager: SC_HANDLE; dwServiceType,
  dwServiceState: DWORD; var lpServices; cbBufSize: Cardinal;
  var pcbBytesNeeded, lpServicesReturned, lpResumeHandle: DWORD): BOOL; stdcall; external   'advapi32.dll' name 'EnumServicesStatusA';

implementation

...
function SearchForApacheServices:boolean;
var
  Data:Pointer;
  lpESS:array of TEnumServiceStatus;
  DatabaseHandle,
  BytesNeeded,
  ServicesReturned,
  ResumeHandle,
  MemLen,
  i:Cardinal;
  ServiceName:string;
begin
DatabaseHandle:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
SetLength(lpESS,1);
ResumeHandle:=0;
WinSVC.EnumServicesStatus(DatabaseHandle,SERVICE_WIN32,SERVICE_STATE_ALL,lpESS[0],SizeOf(TEnumServiceStatus),BytesNeeded,ServicesReturned,ResumeHandle);
//тут-то и пошла самая хитрая замуть
GetMem(Data,BytesNeeded);
MemLen:=BytesNeeded;
EnumServicesStatus(DatabaseHandle,SERVICE_WIN32,SERVICE_STATE_ALL,Data^,MemLen,BytesNeeded,ServicesReturned,ResumeHandle);
//if BytesNeeded=0 then DanceAndJumpArround :-)
SetLength(lpESS,ServicesReturned);
for i:=0 to ServicesReturned do lpESS[i]:=TEnumServiceStatus(Ptr(Cardinal(Data)+36*i)^);
...
end;


факт: все работает!!!

но:

есть ф-я ReadEventLog(), в которую тоже передается ссылка (var) на кусок выделенной памяти, но
оно не работает...

Код

...
function ReadEventLogA(hEventLog: THandle; dwReadFlags, dwRecordOffset: DWORD;
  lpBuffer: Pointer; nNumberOfBytesToRead: DWORD;
  var pnBytesRead, pnMinNumberOfBytesNeeded: DWORD): BOOL; stdcall;
...


по идее и там и там используется динамические массивы С.

Что делать?

Автор: dumb 27.5.2007, 04:41
Цитата(aNGELO @  26.5.2007,  19:08 Найти цитируемый пост)
но оно не работает...

Цитата(aNGELO @  26.5.2007,  19:08 Найти цитируемый пост)
Что делать?

прочитать правила форума. описать что есть "не работает". написать коды ошибок.

Добавлено через 2 минуты и 37 секунд
и кстати, какая вообще связь между приведенным куском кода и вопросом?

Автор: aNGELO 27.5.2007, 17:50
ващет передача в функцию параметров одна и та же )))

Автор: Rouse_ 28.5.2007, 07:42
Вот тебе класс для работы с системным логом и демка. Разбирайся:
http://rouse.drkb.ru/winapi.php#evntlog

Автор: aNGELO 30.5.2007, 13:12
респект.  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)