Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.037 c
14-1119365736
Зеленая Майка
2005-06-21 18:55
2005.07.18
Предлагаю отметить выход из клинической смерти любимого форума


4-1116247125
KSN
2005-05-16 16:38
2005.07.18
запуск процесса


1-1120186136
dm37
2005-07-01 06:48
2005.07.18
DBGrid scrolling


3-1118271148
Dron1173
2005-06-09 02:52
2005.07.18
BackUp базы


8-1111232748
X-Disa
2005-03-19 14:45
2005.07.18
Текст на канвасе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский