![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
По поводу ;ITransport в TSocketConnection [D5, NT4, Win2k]
maxi © (2001-10-25 13:30:00)Помогите разобраться в чем причина:
procedure TForm1.Button4Click(Sender: TObject);
var Myblok : IDataBlock;
begin
MyTrans:= ITransport(SocketConnection1.GetServer);
MyBlok:=IDataBlock(SocketConnection1.GetServer);
MyTrans.Receive(True,45);
//if MyTrans.Connected=True then Label1.Caption:="True";
end;
Этотт код упорно не хочет работать (выдается сообщение о недопустимой операции с памятью), хотя строка:
MyTrans:= ITransport(SocketConnection1.GetServer);
проходит в работе без сбоев. Объясните, правильно ли я получаю ITransport?
Digitman (2001-10-26 08:40:00) [1]>maxi
<Romkin> верно говорит. Если ты не наследуешь TSocketConnection (или даже TStreamedConnection), то - получи IAppServer, работай с ним, ни о чем не заботясь и не лезь в потроха транспортного уровня
Romkin (2001-10-25 17:49:00) [2]ITransport нужен только если пишешь свой TXXXConnection, в остальных случаях - IAppServer. Нафиг надо?
Все, что нужно, в TSocketConn уже есть, а чтобы что-то транспортировать, то сначала нужно реализовать сервер... или дописать Scktsrvr
maxi (2001-10-25 16:17:00) [3]Это я понял, однако вот что странно - та закоментаренная срока тоже абсурдна, но в момент отладки она выдает значение True, если навести мышь на свойство MyTrans.Connected. Однако потом все виснет.
Теперь касательно IТransport: похоже ты Digitman становишься для меня чем то вроде учителя... Я долго рыскал по SocketConnection и надыбал метод .CreateTransport. Этот метод возвращает указатель на IТransport. А уже этот интерфейс позволяет получать и принимать данные с сервера. Однако вся беда в том, что этот метод protected. Его не видно когда пишешь программу.
Встает большущий вопрос - А КАК ПОЛУЧИТЬ ЭТОТ ИНТЕРФЕЙС ?
Этого я к сожалению не понял. Если знаешь - ответь пожалуйста.
Digitman (2001-10-25 14:34:00) [4]>maxi
эта строка
MyTrans:= ITransport(SocketConnection1.GetServer);
не будет работать уже потому, что метод
TDispatchConnection.GetServer возвращает интерфейс IAppServer, не имеющий
ничего общего с ITransport (я здесь не рассматриваю IUnknown)
По той же причине абсурдна и строка
MyBlok:=IDataBlock(SocketConnection1.GetServer);