Что нового

Как узнать, что указатель (дескриптор) - это существующий GDI объект?

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Если вызвать GDIPlus функцию с не правильный или уже уничтоженным объектом, то будет вылет.
Например:
Код:
$hFile1 = _GDIPlus_ImageLoadFromFile($sFile1)
_GDIPlus_ImageDispose($hFile1)
_GDIPlus_ImageGetPixelFormat($hFile1) ;тут вылет


Как тогда можно узнать, что $hFile1 не уничтожен и его можно использовать?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
inververs
с не правильный
Если с неправильным, то вылета быть не должно - вернёт @error
Код:
$hPen = _GDIPlus_PenCreate()
_GDIPlus_ImageGetPixelFormat($hPen) ; нет вылета


А вот обращение к удалённому объекту считается нарушением логики программы (ошибкой, проще говоря). Но, чтобы избежать хотя бы вылетов, можно "удалить" указатель, например так
Код:
$hFile1 = _GDIPlus_ImageDispose($hFile1)
 
Автор
inververs

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
InnI [?]
Вылетает если использовать дескриптор после удаления. (у меня в 3.3.12.0 вылетает.)
А если не правильный то да, устанавливает ошибку.

А вот обращение к удалённому объекту считается нарушением логики программы
Это понятно, я стараюсь не нарушать логику, но мне стало интересно, почему нету функции проверки таких дескрипторов.

Я думаю, что можно как то получить все дескрипторы GDI и поискать среди них. Но знаний не хватает.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
inververs
нету функции проверки таких дескрипторов
Если мы с вами не знаем о такой функции, это ещё не значит, что её нет ;)
GDI+ должна же понимать, с каким объектом она работает. Значит должна быть какая-то функция, определяющая, хотя бы, тип объекта. Другое дело, что она может быть недоступна пользователю.

Попробуйте спросить на официальном форуме. Там есть специалисты по GDI+. Может и ответят...
 
Автор
inververs

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Спросил. Ответил 1 человек, сказал что тоже не знает способа.
 
Верх