Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Чёртов Service [Delphi, Windows]


Vladimyr ©   (2005-03-11 11:28:00) 

Доброе время суток всем, кто сумел написать сервис на KOL :)
У меня возникла следующая проблема: до момента показа формы всё работает нормально, а в момент закрытия оной вылезает ошибка обращения к памяти по адресу "00000000".

Код примерно такой:

1. в файле "Testserv_1.inc":

ifStart thenexit;

2. в файле "TestServ.dpr":

functionStart: boolean; stdcall;
begin

  ServTable[0].lpServiceName := SERVICE_NAME;
  ServTable[0].lpServiceProc := @ServiceProc;
  ServTable[1].lpServiceName := nil;
  ServTable[1].lpServiceProc := nil;
  result := StartServiceCtrlDispatcher (ServTable[0]);
  if notresult and(GetLastError = ERROR_FAILED_SERVICE_CONTROLLER_CONNECT) then
    MsgOK ('Usual start...');
end;


(то есть проверяем, как стартовали - как сервис или как приложение, и во втором случае запускаем апплет обычным порядком -  тут всё OK, апплет стартует и нормально завершается)

procedureServiceProc(argc: DWORD; varargv: array ofPChar) stdcall;
begin

  ...
  NewForm1 (Form1, pointer (Applet));
  run (Applet);

end;


...а вот тут ошибка - апплет стартует нормально, а в момент завершения обращается к несуществующей памяти...

Сердцем чую, что какая-нибудь ерунда...  :-)


Vladimyr   (2005-03-11 12:38:00) [1]

Вроде бы нашёл причину: статус сервиса в процедуре ServiceCtrlHandlerу меня обновлялся с интервалом 100 мс...

Сам спросил, сам и ответил... <;*}


Vladimyr   (2005-03-11 12:22:00) [2]

Ещё одно странное наблюдение:
если в процедуре " ServiceProc" добавить после " run (Applet);" команду " MsgOK ('The end');" или " sleep (100);", то апплет завершается без ошибки!

Вот это уж совсем непонятно...  ==(
(хотя вроде бы решает проблему)


Наверх

Титульная страница Поиск, карта сайта Написать письмо