Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Глюк в TSocketConnection и в клиенте (Midas, DCOM)


maxi ©   (2002-05-08 10:43:00) 

Здрасте. У меня вопрос: есть Сервер приложений и клиентская часть. Вот часть клиента на коннект :

SocketConnection1.Open;
if SocketConnection1.Connected then
      begin
      MainData :=IRDMZadachdisp(SocketConnection1.GetServer);
      .....
      end;

Первый раз все происходит нормально, соединение устанавливается, и при попытке вызвать метод интерфейса тоже проблем нет.
Сервер рассылает сообщение о своем закрытии, моя программа (клиент) отлавливает это сообщение и клиетская часть делает disconnect:

SocketConnection1.Close;

Однако, сам клиент не выключается (выключаться не должен), просто должно разрываться соединение. При повторном запуске сервера где то на стороне, я вручную опять делаю коннект (по кнопке) смотри выше, где происходит:
...
MainData :=IRDMZadachdisp(SocketConnection1.GetServer);
...
Т.е. получаю новую ссылку на интерфейс(замещая старую). Однако при попытке вызова метода по новой ссылке , например MainData.MyMethod1(..),
у меня возникает исключение (типа Аксесс по адресу ХХХ денайд). Я нашел в чем проблема : если написать так

if MainData = nil then MainData:=IRDMZadachdisp
                                (SocketConnection1.GetServer);

то ошибка не возникает и методы проходят нормально. Т.е. получается, что хотя я и получил новую ссылку,но она не рабочая, а вот старая ссылка остаётся рабочей вплоть до вырубления клиента целиком.
Появляется вопрос : Почему так ? Разве новая ссылка на интерфейс корявая ? Если да, то почему ?  Или надо до разрыва соединения уничтожать старую ссылку на интерфейс ? Тогда как ?
Посоветуйте ....


Олег Лаукарт   (2002-05-10 11:36:00) [1]

Попробуй перед получением новой ссылки обнулять старый интерфейс:
MainData := nil;
MainData :=IRDMZadachdisp(SocketConnection1.GetServer);


Наверх

Титульная страница Поиск, карта сайта Написать письмо