![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как удалить динамически созданные ClientSocket при OnDisconnect?
Сергей © (2009-04-28 16:18:00)Здравствуйте
Помогите пожалуйста с моей проблемой.
Я хочу при удаленном разрыве соединения (по событию) удалить динамически созданный объект компонента ClientSocket
маленький поясняющий пример кода:
глобальный var
ClientSocket: TClientSocket;
создаю
ClientSocket:=TClientSocket.Create(Self);
ClientSocket.Host := '127.0.0.1';
ClientSocket.Port := 5000;
ClientSocket.OnDisconnect=ClientSocketDisconnect;
ClientSocket.Open;
в процедуре ClientSocketDisconnect(Sender: TObject; Socket: TCustomWinSocket)
хочу удалить ранее созданные ClientSocket - у меня ни как это не не удается сделать Free так как возникает ошибка 10038
подскажите пожалуйста как мне это сделать?
Сергей М. (2009-04-30 20:38:00) [1]
> dll будет использоваться из оконных положений
Даже если из оконных, не факт что твоя dll будет работоспособной.
То что ты тестируешь работоспособность своей dll в простейшем "шаблонном" дельфийском тестовом VCL-приложении, вовсе не говорит о том, что та же dll будет работоспособна при ее использовании любым другим "оконным" приложением.
Empleado (2009-04-30 16:52:00) [2]
> dll будет использоваться из оконных положений
.....
> как удалить объект я так и не узнал...
see Сергей М. © (29.04.09 10:27) [5]
Сергей (2009-04-30 16:49:00) [3]спасибо за разъяснение... dll будет использоваться из оконных положений
так что проблем не будет
как удалить объект я так и не узнал...
Сергей М. (2009-04-30 08:15:00) [4]
> Самое интересное что у меня все замечательно работает
А теперь создай простейшее консольноеприложение, вызови из него свою dll и удивись - работать твой неблокирующий ClientSocket не будет.
Сергей (2009-04-29 21:24:00) [5]Самое интересное что у меня все замечательно работает
Могу создавать и удалять динамические объекты TClientSocket в любой момент времени. Обмен пакета работает.
В апликейшене если по событию расконекта изменить тип на блокирующий - все замечательно грохается.
В dll не дает менять типа - так как типа есть связь, закрытие соединение приводит к зацикливанию. Просто активность на false результата не даёт
Сергей М. (2009-04-29 12:23:00) [6]
> у меня вообще нет ни одной формы - dll
> Но это в принципе не важно
Это оченьважно !
Неблок.режим использует для нотификации о гнездовых событиях механизм оконных сообщений. Чтобы этот механизм работал, нужен цикл ожидания-выборки-диспетчеризации оконных сообщений в том же потоке, который выполнил метод TClientSocket.Open.
Поскольку в твоей dll этого цикла нет, то он так или иначе должен присутствовать в коде где-то за пределами твоей dll, например, в коде хост-приложения, в противном случае компонент работать небудет.
Сергей (2009-04-29 12:07:00) [7]у меня вообще нет ни одной формы - dll
TClientSocket - создаются динамически для разных коннектов
Но это в принципе не важно - так как в апликейшине на простейшем примере та же проблема....
задача стоит удалить нужный при получении события о разрыве связи
Вопрос остался открытым
Сергей М. (2009-04-29 10:27:00) [8]Я к тому, что если в приложении есть хотя бы одно окно - к примеру, окно формы - ему можно послать предопределенное асинхронное сообщение (PostMessage), при получении и обработке которого требуемый объект будет уничтожен.
Вот и предположил, что Self у тебя ссылается на форму
Сергей (2009-04-29 00:44:00) [9]Тезка я уже тебе ответил - там NIL !!!
Сергей М. (2009-04-28 19:18:00) [10]
> у меня это просто поверхность
Ты русский понимаешь ?)
Я не спрашиваю, кто или что у тебя там есть "поверхность".
Я спрашиваю, что за объект у тебя фигурирует в кач-ве Self, коль скоро ты передаешь его фактическим параметром в конструктор класса TClientSocket..
Или тебе фиолетово кто он такой ?)
Сергей (2009-04-28 17:52:00) [11]
> А кто такой Self ?
сорри - у меня это просто поверхность TComponent - для динамически созданных объектов
ClientSocket:=TClientSocket.Create(NIL); - разницы нет
Сергей М. (2009-04-28 17:42:00) [12]А кто такой Self ?