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


Автор: NT_AUTHORITY 23.2.2008, 20:36
Доброго времени суток тем, кто занимается нестандартным программированием. Я пишу сетевую программу, и счёл нужным сделать сервер без форм. Для реализации сетевого взаимодействия мне нужен класс TIDUDPServer. И у меня такая запара: я создаю экземпляр этого класса:

Код

    IdUDPServer1 := TIdUDPServer.Create(nil);
    IdUDPServer1.DefaultPort := 1222;
    IdUDPServer1.OnUDPRead := OnReadData;
    IdUDPServer1.Active := TRUE;


Вроде, всё логично, но 
Код
IdUDPServer1.OnUDPRead := OnReadData 
 Delphi не нравится! Пишет: [Error] InvServer.dpr(29): Incompatible types: 'method pointer and regular procedure'. Но если процедура OnReadData располагается внутри юнита с формой (
Код
 procedure TForm1.OnReadData(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
), всё нормально. Похоже, компилятор Dephi даёт лажу! Кто-нибудь сталкивался с подобной проблемой? Если да, то подскажите мне, горе-программеру, в чём дело?! smile

Автор: MetalFan 23.2.2008, 20:49
Цитата(NT_AUTHORITY @  23.2.2008,  20:36 Найти цитируемый пост)
Похоже, компилятор Dephi даёт лажу!


Цитата(NT_AUTHORITY @  23.2.2008,  20:36 Найти цитируемый пост)
Incompatible types: 'method pointer and regular procedure'.

это не лажа, а подсказка...
несовместимые типа: указатель на метод и процедура.
обработчиком события может быть метод объекта, а не регулярная процедура.
хотя путем шаманских действий можно и обычную процедуру вклячить

Автор: NT_AUTHORITY 24.2.2008, 18:55
Спасибо за помощь! Проблема решена! Я создал класс, внутри которого поместил обработчики событий. После создания экземпляра класса и присвоения соответствующего метода всё катит на все 100! 

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