Тема: Object-Handle
Показать сообщение отдельно
Старый 22.05.2010, 05:42   #12
Crayzi
ПроЭктировщик
 
Регистрация: 26.06.2007
Сообщений: 194
Написано 21 полезных сообщений
(для 25 пользователей)
Ответ: Object-Handle

Как проверить существует ли объект, без перебора, потому что если попытатся получить доступ к какому либо значению удаленного объекта, то вылетает мемори аксесс волатион.
Type test
	Field rrr
	Field hendl
End Type

ptr.test=New test
ptr\rrr=1
ptr\hendl=Handle ptr
ptr.test=New test
ptr\rrr=1
ptr\hendl=Handle ptr
ptr.test=New test
ptr\rrr=1
ptr\hendl=Handle ptr
ptr.test=New test
ptr\rrr=1
ptr\hendl=Handle ptr
For p.test = Each test
	If p\hendl=3 Delete p;----Удаляем 3-й объект.
Next
ptr\hendl=Handle ptr
ptr.test=New test
ptr\rrr=1
ptr\hendl=Handle ptr
new_ptr.test=Object.test(3);-----Выбираем объект для действия.
new_ptr\rrr=200;-----------------Меняем значение поля "rrr" и получаем МАВ.

For p.test = Each test
	Print p\rrr
	Print p\hendl
	Print Handle p
Next

WaitKey

----------------------------------------------------------------


П.с. Под утро меня озарило, проверить будет ли МАВ если попробовать узнать хендл несуществующего объекта, МАВ не выдало, а хендл был равен нулю (нумерация в типах начинается с 1-ци, так что все ок).
Вместо:
new_ptr.test=Object.test(3)
new_ptr\rrr=200
Надо использовать:
new_ptr.test=Object.test(3)
If Handle new_ptr <>0;---или If (Handle new_ptr), на ваше усмотрение.
	new_ptr\rrr=200
EndIf

Последний раз редактировалось Crayzi, 22.05.2010 в 12:33.
(Offline)
 
Ответить с цитированием