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

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

Почему это глючит? [D6]


Barloggg ©   (2005-03-24 12:50:00) 

вопрос касается использования ДиректХ под дельфи

При работе с DirectX и запуске из под дельфей(!) глючит следующая строка
if D3D<>nil then
 D3D._release;//эта строка проходит
 D3D:=nil;//эта глючит
end;
здесь D3D:IDIRECT3D8; //интерфейс директХ8
в чем прикол я так и не понял...

Поэтому я запускаю или готовый ехе-шник, или (при запуске из под дельфи) вообще не произвожу освобождение памяти.
Метода .free нету... сырцов тоже... а в книжке написано что освобождать надо именно так и не иначе...


clickmaker   (2005-03-24 14:32:00) [1]


> Barloggg   (24.03.05 13:52) [6]

не надо _Release дергать. Компилер сам вставляет этот вызов при выходе поинтера из области жизни или если ты ему nil присвоил


Barloggg   (2005-03-24 13:52:00) [2]

О!!! точно интерфейсы не имеют конструкторов и деструкторов. и посему нефиг их освобождать.
однако чуть ниже в хелпе написано, что СОМ объекты надо освобождать путем _release. А сам DirecX это ведь и есть com объект...
фигня какая-то...
ладно, раз не надо высвобождать ручками, то и не буду.
хотя если посмотреть заголовки инициализационных функций то сомнения не исчезают.

короче для верности
D3D._release;оставлю, а D3D:=nil отключу. или лучше наоборот?


Barloggg   (2005-03-24 13:35:00) [3]

2bar
хмм... если это так, то тогда все прекрасно, однако это малость противоречит моему представлению о переменных... я же всего навсего присваиваю ему nil, с чего бы Дельфи делать какие-либо лишние телодвижения.
Кстати да, сообщение об ошибке было именно такого плана - объет не существует либо не создан либо уже удален.

Пойду почитаю хеплы по этой теме.


Barloggg   (2005-03-24 13:32:00) [4]

Краснов М.В.
DirectX. Графика в проектах Delphi. - СПб.: БХВ-Петербург, 2002. - 416 с.: ил. ISBN 5-94157-033-3.


bar   (2005-03-24 13:31:00) [5]

Насколько я помню в DirectX  все через интерфейсы сделано.
А при присовении интерфейсу nil делфи автоматически вызывает release.
Таким образом
D3D._release;//освобождаеш интерфейс сам
D3D:=nil;// делфи автоматически вызывает release а поскольку интерфейс освобожден отсюда и глюк.
По-моему можно вообще просто присвоить D3D:=nil и все.


Думкин   (2005-03-24 13:07:00) [6]

а что за книга?


DiamondShark   (2005-03-24 12:58:00) [7]


>  D3D:=nil;//эта глючит

Рекомендую посмотреть эту строчку в окне CPU.


Наверх

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