![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обработчики событий у компонента TServerSocket [D3, D7, WinXP]
Ezorcist © (2005-11-09 11:51:00)Отчего такая пограмма вызывает ошибку при получении текста?:
procedure onr (Sender: TObject; Socket: TCustomWinSocket);
begin showmessage(socket.receivetext); end;
procedure TForm1.Button1Click(Sender: TObject);
var m:tmethod;
begin
my:=tserversocket.create(my);
my.Port:=1100;
my.Open;
m.Code:=@onr; m.Data:=nil;
my.OnClientRead:=TSocketNotifyEvent(m);
end;
Ezorcist (2005-11-11 08:21:00) [1]Спасибо в любом случа, помогли.
Digitman (2005-11-10 14:58:00) [2]
> Не в моем случае.
в твоем случае [4] это и есть РЕГУЛЯРНАЯ ПРОЦЕДУРА.
равно как и в [0] - она же.
> сдесь расматривается именно регулярная процедура
а то я не вижу)
> а, интересно, куда будет записано значение Data если эта
> процедура-обработчик регулярная процедура?
на кудыкину гору.
читай внимательно [9]:
Значение Data будет записано в регистр ebx непосредственно перед вызовом процедуры
seeker (2005-11-10 14:42:00) [3]
> как в твоем случае
Не в моем случае.
> а не регулярную процедуру
сдесь расматривается именно регулярная процедура...
> Значение Data будет записано в регистр ebx непосредственно
> перед вызовом процедуры-обработчика, и в случае если эта
> процедура-обработчик являет собой метод класса
а, интересно, куда будет записано значение Data если эта процедура-обработчик регулярная процедура?
Digitman (2005-11-10 11:51:00) [4]
> seeker © (10.11.05 11:43) [8]
> Это не имеет никакого значения
глубоко заблуждаешься.
Data - это вовсе не Sender
Значение Data будет записано в регистр ebx непосредственно перед вызовом процедуры-обработчика, и в случае если эта процедура-обработчик являет собой метод класса (а не регулярную процедуру, как в твоем случае) будет являть собой значение Self.
seeker (2005-11-10 11:43:00) [5]
> то ли есть dummy-параметр [4] то ли нет его [0] ..
Это не имеет никакого значения.
при
m.Code:=@onr; m.Data:=nil;
первым параметром в onr всегда будет пердаваться то что в Data, а уже затем все остальное.
в его случае получается:
Sender = Data = nil, а Socket = Sender.
Digitman (2005-11-10 11:28:00) [6]
> Дурная манера отвечать вопросом на вопрос
сначала научись задавать вопросы, потом будешь уже рассуждать про "дурные манеры"
> если Ezorcist знает про tmethod, то
.. то сначала Ezorcist должен определиться, что у него там на самом деле с параметрами творится - то ли есть dummy-параметр [4] то ли нет его [0] ..
без этого дальнейший разговор не имеет смысла
seeker (2005-11-10 11:04:00) [7]
> а к чему эти выкрутасы с TMethod ?
Дурная манера отвечать вопросом на вопрос.
Если кто-то что-то спрашивает, то наверно не просто так.
если Ezorcistзнает про tmethod, то наверняка он знает и про то, что можно обработчику назначить метод формы, но его, видимо, это не устраивает.
Digitman (2005-11-10 10:04:00) [8]а к чему эти выкрутасы с TMethod ?
класс у тебя есть (TForm1), ну так объяви и реализуй в нем полноценный метод-обработчик и назначь его св-ву TServerSocket.OnClientRead !
TForm1 = class(..)
..
procedure DoClientRead(Sender: TObject; Socket: TCustomWinSocket);
..
end;
procedure TForm1.DoClientRead;
begin
...
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
my:=tserversocket.create(my);
my.Port:=1100;
my.OnClientRead := DoClientRead;
my.Open;
end;
?
seeker (2005-11-10 09:29:00) [9]
procedure onr (dummy:pointer; Sender: TObject; Socket: TCustomWinSocket);
begin
showmessage(socket.receivetext);
end;
Digitman (2005-11-10 08:22:00) [10]при выполнении какой конкретно строчки возникает ошибка ?
Ezorcist (2005-11-09 17:05:00) [11]Windows socket error: запрос на отправку или получение данных no address was supplied (10057), on API 'recv'
Digitman (2005-11-09 12:49:00) [12]какую ?