![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Глюк в 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);