|
Вопрос # 4 298/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
Моя проблема называется Internal Error T2335.
Суть вопроса в следующем:
Была задача зарегистрировать программу с графическим интерфейсом в системе как сервис, без использования стандартного визарда Delphi по созданию сервисов. Для этого был взят сэймпл отсюда
http://msdn.microsoft.com/en-us/library/bb540475(VS.85).aspx
после чего были сделаны подгонки к синтаксису delphi и вроде бы все нормально, но выскакивает ошибка T2335, причину которой я пока не понял =(.
Исходники прилагаются, основной текст программы не в unit1.pas а в Project1.dpr
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
Приложение: Переключить в обычный режим-
-
- /
- // Purpose:
- // Called by SCM whenever a control code is sent to the service
- // using the ControlService function.
- //
- // Parameters:
- // dwCtrl - control code
- //
- // Return value:
- // None
- //
- Procedure SvcCtrlHandler( dwCtrl:DWORD );
- Begin
- // Handle the requested control code.
- case dwCtrl of
-
- SERVICE_CONTROL_STOP:
- Begin
- ReportSvcStatus(SERVICE_STOP_PENDING, NO_ERROR, 0);
-
- // Signal the service to stop.
- SetEvent(ghSvcStopEvent);
- ReportSvcStatus(gSvcStatus.dwCurrentState, NO_ERROR, 0);
- End;
-
-
- SERVICE_CONTROL_INTERROGATE:
- break;
-
- else
- break;
- end;
-
- End;
 |
Вопрос задал: SOA (статус: Посетитель)
Вопрос отправлен: 8 июня 2010, 12:46
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, SOA!
Такой тип ошибок возникает, когда у компилятора что то там внутри не сходиться. или програмист написал код, который малось трехсмыссленный.
Посмотрим на Ваш код. Что мы видим странного - оператор break, Он предназначен для выхода с цикла, но не с case (это не с/С++, тут это не нужно!).
Вот компилятор и пытается найти вышестоящий цикл и не может...
Правильнее будет писать так
Procedure SvcCtrlHandler( dwCtrl:DWORD );
Begin
// Handle the requested control code.
case dwCtrl of
SERVICE_CONTROL_STOP:
Begin
ReportSvcStatus(SERVICE_STOP_PENDING, NO_ERROR, 0);
// Signal the service to stop.
SetEvent(ghSvcStopEvent);
ReportSvcStatus(gSvcStatus.dwCurrentState, NO_ERROR, 0);
End;
SERVICE_CONTROL_INTERROGATE:
begin
end;
else begin
end;
end;
End;
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 8 июня 2010, 12:56
Оценка за ответ: 5
Комментарий к оценке: Спасибо.
|
Мини-форум вопроса
Всего сообщений: 3; последнее сообщение — 8 июня 2010, 13:03; участников в обсуждении: 2.
|
lx (статус: Посетитель), 8 июня 2010, 12:55 [#1]:
"подгонки к синтаксису delphi" -- это мощно Зачем в case используются операторы break? break нужнен в сишном switch, т.к. он работает не совсем так, как case.
P.S. Поиск такой поиск: http://forum.vingrad.ru/forum/topic-120616.html
|
|
SOA (статус: Посетитель), 8 июня 2010, 13:01 [#2]:
lx
ТОЧНО
|
|
SOA (статус: Посетитель), 8 июня 2010, 13:03 [#3]:
Большое спасибо всем теперь компилятор адекватно понимает код, ну и конечно выдает новые ошибки 8)
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|