Форум: "Media";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];
ВнизПочему это глючит? Найти похожие ветки
← →
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 вся ветка
Форум: "Media";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c