Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 298

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Моя проблема называется Internal Error T2335.
Суть вопроса в следующем:
Была задача зарегистрировать программу с графическим интерфейсом в системе как сервис, без использования стандартного визарда Delphi по созданию сервисов. Для этого был взят сэймпл отсюда
http://msdn.microsoft.com/en-us/library/bb540475(VS.85).aspx
после чего были сделаны подгонки к синтаксису delphi и вроде бы все нормально, но выскакивает ошибка T2335, причину которой я пока не понял =(.

Исходники прилагаются, основной текст программы не в unit1.pas а в Project1.dpr

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Приложение:
  1.  
  2.  
  3. /
  4. // Purpose:
  5. // Called by SCM whenever a control code is sent to the service
  6. // using the ControlService function.
  7. //
  8. // Parameters:
  9. // dwCtrl - control code
  10. //
  11. // Return value:
  12. // None
  13. //
  14. Procedure SvcCtrlHandler( dwCtrl:DWORD );
  15. Begin
  16. // Handle the requested control code.
  17. case dwCtrl of
  18.  
  19. SERVICE_CONTROL_STOP:
  20. Begin
  21. ReportSvcStatus(SERVICE_STOP_PENDING, NO_ERROR, 0);
  22.  
  23. // Signal the service to stop.
  24. SetEvent(ghSvcStopEvent);
  25. ReportSvcStatus(gSvcStatus.dwCurrentState, NO_ERROR, 0);
  26. End;
  27.  
  28.  
  29. SERVICE_CONTROL_INTERROGATE:
  30. break;
  31.  
  32. else
  33. break;
  34. end;
  35.  
  36. End;


SOA Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

lx (статус: Посетитель), 8 июня 2010, 12:55 [#1]:

"подгонки к синтаксису delphi" -- это мощно ;)Зачем в case используются операторы break? break нужнен в сишном switch, т.к. он работает не совсем так, как case.

P.S. Поиск такой поиск: http://forum.vingrad.ru/forum/topic-120616.html
SOA

SOA (статус: Посетитель), 8 июня 2010, 13:01 [#2]:

lx
ТОЧНО
SOA

SOA (статус: Посетитель), 8 июня 2010, 13:03 [#3]:

Большое спасибо всем теперь компилятор адекватно понимает код, ну и конечно выдает новые ошибки 8)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:44
Выполнено за 0.03 сек.