Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Ошибки при завершении программмы


Автор: [3Df]Grey DeMonstr 22.8.2004, 00:20
У меня при закрытии программы вылетают две одинаковых ошибки типа Access Violation по адресу.. и так далее. Я использую такие вот переменные:
Код

var
 FDD             :IDirectDraw7;
 FDDSPrimary, FDDSMap, FDDSChipset,  FDDSTile, FDDSMinimap   :IDirectDrawSurface7;
 FDDClipper      :IDirectDrawClipper;

Освобожаю при закрытии в порядке, обратном порядку создания:
Код

if Assigned(FDD) then begin
 if Assigned(FDDSMap) then FDDSMap:=nil;
 if Assigned(FDDSChipset) then FDDSChipset:=nil;
 if Assigned(FDDSMinimap) then FDDSMinimap:=nil; //???
 if Assigned(FDDSPrimary) then FDDSPrimary:=nil; //???
 if Assigned(FDDClipper) then FDDClipper:=nil;  
 FDD:=nil;                                       //???
 end;
Application.Terminate;

Самое интересное: ошибки остаются, если хотя бы одна из строк, помеченных //??? не закомментирована. Наличие/отсутствие других строк на ошибки не влияют. Если убираю все три строки, ошибки исчезают. Подскажите, с чем может быть это связано и как этого избежать?
Заранее благодарен.

Автор: GRU 25.8.2004, 09:20
niznaju kak rabotaet, no esli vazmozhno paprobui Free potom nil

Автор: [3Df]Grey DeMonstr 25.8.2004, 11:21
Для объектов DirectDraw нет метода Free. Использование аналогичного по смыслу метода _Release приводит ко множеству ошибок sad.gif

Автор: Girder 25.8.2004, 12:19
Вообще-то для совсем правильной работы надо пользоваться методом Release. Так как ты работаеш с COM объектом.
Ну а ошибка может быть где угодно: Какая верия DirectX, Получил лы ты нужный интерфейс, все ли ошибки в самой программе отловил. Ты бы код показал программы и модуля DirectDraw.pas или как он у тебя называется.

Автор: GRU 25.8.2004, 12:21
i Assign(nil) netu? parent?

Автор: [3Df]Grey DeMonstr 25.8.2004, 13:21
Ладно, спасибо за помощь, я уже разобрался. Ошибки возникали из-за того, что уже после Form.Close происходило Form.Paint, а поверхности уже были освобождены.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)