![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос касается использования примеров из книги Краснова "Delphi [D6, WinXP]
Pa5ha © (2003-12-16 18:50:00)При компиляции и запуске проектов (некоторых) из Дельфи возникает ошибка. Из за чего же она возникает? При добавлении на форму панелей в немеренных количествах происходит тоже самое.
Pa5ha (2003-12-19 22:59:00) [1]Блин! Когда работает, а когда нет!!! Я пишу свой редактор и в нем такие баги появляются. Сейчас например работает. Кстати, почему DUnits не компилируется в Delphi7?
Крупье (2003-12-19 10:57:00) [2]Delphi при высвобождении памяти COM-объектов автоматом вызывает _Release. Сделано это для удобства программирования.
При запуске проектов примеров под управлением среды программирования Delphi, она (среда) перехватывает исключение, возникающее при повторном обращении к _Release. Хотя в коде реализации _Release и осуществляется проверка связанности переменной, преобразование типов, предшествующее этой операции, приводит к безобидному (в данном случае) исключению.
Можно отключить опцию перехвата сообщений средой, либо запускать откомпилированный файл отдельно от среды, либо не вписывать вызов _Release.
Если Вы сможете указать пример, приводящий к исключению в других ситуациях, я с удовольствием разберу и его.
Eagle Owl (2003-12-18 22:11:00) [3]> Крупье (17.12.03 17:48) [5]
> Ясненько. Про это тоже написано в книге. В следующем и > подобном ему коде
> if Assigned (FD3DDevice) then begin
> FD3DDevice._Release;
> FD3DDevice := nil;
> end;
> удаляйте вторую строку, то есть вызов метода _Release удаляете, > а оставляете присваивание nil.
А в чём причина? (тоже с этим столкнулся)
Крупье (2003-12-17 17:48:00) [4]>Pa5ha (17.12.03 17:09) [4]
Ясненько. Про это тоже написано в книге. В следующем и подобном ему коде
if Assigned (FD3DDevice) then begin
FD3DDevice._Release;
FD3DDevice := nil;
end;
удаляйте вторую строку, то есть вызов метода _Release удаляете, а оставляете присваивание nil.
Pa5ha (2003-12-17 17:09:00) [5]Пардон. Я полагал, что вы читали эту книгу...
Ошибка возникает при удалении объектов (CleanUp(для тех, кто читал)). Код удаления (вызов CleanUp) находится в OnDestroy. При перемещении в OnClose ошибка исчезает. Хочу понять природу этой ошибки.
Крупье (2003-12-17 10:44:00) [6]Проблемы компиляции возникают из-за динамики развития Delphi. То, что написано в 5-й версии Delphi, совсем не обязательно будет компилироваться в 6-й и выше, даже при использовании только стандартных модулей, не говоря уже о случаях, когда вынужденно используешь нестандартные модули. Эти проблемы разрешаются одним из двух способов-используется Delphi именно той версии, о которой говорится в книге, либо берутся заголовочники именно для той версии, которую используете Вы. Адреса, указанные в книге, или поисковые машины, помогут найти такие заголовочники.
Решение технических проблем, связанных с разнообразием поведения примеров под разными видеокартами, часто указано в книге, как например, проблемы с буфером трафарета.
Есть проблема с последним примером книги по DirectX, проявляющаяся на современных "быстрых" картах. Самое простое ее решение-отключить вывод FPS.
Думкин (2003-12-17 08:30:00) [7]1. Наверное у тебя ошибка в программе.
2. У Краснова известны 2 книги.
ЮЮ (2003-12-17 05:51:00) [8]Если полагаешь, что при работе возможна только однаошибка, то глубоко ошибаешься, а если думаешь, что нам отсюда видно, что это за ошибка, то ошибаешься ещё глубже