Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.18;
Скачать: CL | DM;

Вниз

Почему это глючит?   Найти похожие ветки 

 
Barloggg   (2005-03-24 12:50) [0]

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

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

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


 
DiamondShark ©   (2005-03-24 12:58) [1]


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

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


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

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


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

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


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

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


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

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

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


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

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

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


 
clickmaker ©   (2005-03-24 14:32) [7]


> Barloggg   (24.03.05 13:52) [6]

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



Страницы: 1 вся ветка

Текущий архив: 2005.07.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.058 c
14-1119715087
GEEK
2005-06-25 19:58
2005.07.18
Версии


9-1112811575
HPR
2005-04-06 22:19
2005.07.18
DelphiX и краевой альфаблендинг


4-1116861129
Volume
2005-05-23 19:12
2005.07.18
Мышь


3-1117708737
Harry7
2005-06-02 14:38
2005.07.18
Напоминалка для Дней Рождения


1-1119681562
Joy
2005-06-25 10:39
2005.07.18
RxRichEdit