![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Чёртов 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);", то апплет завершается без ошибки!
Вот это уж совсем непонятно... ==(
(хотя вроде бы решает проблему)