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

Вниз

Показ форм   Найти похожие ветки 

 
TForm   (2006-07-25 21:54) [40]

заменить

> if FrAvtPikTuz<>nil then FreeAndNil(FrAvtPikTuz);

на
if FrDLL<>nil then FreeAndNil(FrDLL);


 
TForm   (2006-07-25 21:56) [41]

Блин, ну откуда эти ровные количества нормальных работ до возникновения ошибки?????????????????????????????????????????


 
TForm   (2006-07-26 22:39) [42]

Блин, ну че так все игнорируют эту тему?


 
tesseract ©   (2006-07-26 22:48) [43]

> [42] TForm   (26.07.06 22:39)

Твоя проблема описана в документациии Delphi.
Это абсолютно нормальное поведение.
Попробуй поиск.


 
TForm   (2006-07-27 01:50) [44]

> [43] tesseract ©   (26.07.06 22:48)

А что именно искать? Много уже чего перерыл... Да и стал бы я эту тему продолжать если бы хоть чего нибудь нашел...
Правда тут вопрос немного поменялся походу, может это сбивает с толку?
Вопрос о количестве нормальных работ до возникновения ошибки

> Это абсолютно нормальное поведение.

Нифигасебе :) помоему это ненормально:

> [16] TForm   (15.07.06 02:33)
> [24] TForm   (18.07.06 00:39)


> Твоя проблема описана в документациии Delphi.

Как и где она там описана?
Спасибо.


 
ЮЮ ©   (2006-07-27 08:51) [45]


> почему-то все время после четвертого создания формы,


Чисто случайно. Если бы положил Timer(TimerList) на обычную форму и закрыл её при активном timer-е, то получил бы AV с первого раза :)

Перед уничтожением формы следует дезактивировать таймеры


 
TForm   (2006-07-27 14:30) [46]

> [45] ЮЮ ©   (27.07.06 08:51)


> Чисто случайно.

тучу раз подряд и все время восемь (а уже не четыре, если этот пост с начала почитать, то там написано как было) раз нормально, вроде как, получается не случайно...TimerList имеется, а вот насчет деактивации timer"ов надо посмотреть. Очень большое спасибо. Вот это и называется предположения об ошибках...Сейчас проверю... А деактивировать нужно в OnDestroy формы?


 
TForm   (2006-07-27 15:01) [47]

> [45] ЮЮ ©   (27.07.06 08:51)
> почему-то все время после четвертого создания формы,

не создания а разрушения...

Добавил на дестрой - деактивацию таймеров - результат тот же
вот весь код уничтожения формы
Повторяюсь, ровно семь раз это срабатывает нормально, а на восьмом

procedure TFrDLL.FormDestroy(Sender: TObject);
var R, C: Byte;
Fl: File;
begin
 Tm1.Enabled:=False;
 TmLs.Active:=False;
 AssignFile(Fl, SetFlNm);
 try Rewrite(Fl,1);
 BlockWrite(Fl, DATA.To, SizeOf(DATA.To));
 BlockWrite(Fl, DATA.From, SizeOf(DATA.From));
 for R:=Low(DATA.WK) to High(DATA.WK)
  do BlockWrite(Fl, DATA.WK[R], SizeOf(DATA.WK[R]));
 for R:=Low(DATA.WL) to High(DATA.WL)
  do BlockWrite(Fl, DATA.WL[R], SizeOf(DATA.WL[R]));
 finally CloseFile(Fl); end;
 if BASSLOADED then for R:=0 to MAX_SND do begin  //MAX_SND=13
   SoundRes[R].StreamRes.Free;
   BASS_StreamFree(SoundRes[R].Snd);
  end;
 BASS_Free;
 for R:=1 to MAX_PICTS do try P[R].BMP.Free; except end; //MAX_PICTS=8
//Exit; //Если раскоментировать то ошибка не вылетает не на 4, не на 8, не на 50...n разе;
 try PBMP.Free; P2BMP.Free; except end;
 end;
end;
Вот сюда вылетаем после ошибки:
procedure TRxTimerList.RemoveItem(Item: TRxTimerEvent);
begin
 FEvents.Remove(Item);
-->  Item.FParentList := nil;
end;

вот создание

procedure TFrDLL.FormCreate(Sender: TObject);
begin
 BASSLOADED:=(HIWORD(BASS_GetVersion) = BASSVERSION)
             and (BASS_Init(-1, 44100, 0, Handle, nil));
 DLLPath:=GetModulePath(HInstance);
 EXEPath:=GetModulePath(0);
 ...
 if FileExists(SetFlNm) then begin
  AssignFile(Fl, SetFlNm);
 try Reset(Fl,1);
  BlockRead(Fl, DATA.To, SizeOf(DATA.To));
  BlockRead(Fl, DATA.From, SizeOf(DATA.From));
  for R:=Low(DATA.WK) to High(DATA.WK) do BlockRead(Fl, DATA.WK[R], SizeOf(DATA.WK[R]));
  for R:=Low(DATA.WL) to High(DATA.WL) do BlockRead(Fl, DATA.WL[R], SizeOf(DATA.WL[R]));
  finally CloseFile(Fl); end;
 end;
 PBMP:=TBitMap.Create;
 PBMP.LoadFromResourceName(Hinstance, "BMP");
 P2BMP:=TBitMap.Create;
 P2BMP.LoadFromResourceName(Hinstance, "2BMP");
 for R:=1 to MAX_PICTS do begin  
  P[R].BMP:=TBitMap.Create;
  P[R].BMP.LoadFromResourceName(Hinstance, "P"+IntToStr(R));
 end;
 if BASSLOADED then for R:=0 to MAX_SND do begin
  SoundRes[R].StreamRes:=TResourceStream.Create(hInstance, Pchar("SND"+IntToStr(R)), PChar("SOUND"));
  SoundRes[R].Snd:=BASS_StreamCreateFile(True, SoundRes[R].StreamRes.Memory, 0, SoundRes[R].StreamRes.Size, 0);
 end;
end;


 
ЮЮ ©   (2006-07-28 03:16) [48]

for R:=0 to MAX_SND
 SoundRes[R].

for R:=1 to MAX_PICTS
 P[R].BMP.Free;

что за звери SoundRes и P? где объявлены.
Уж больно подозрительные диапазоны циклов

Вот сюда вылетаем после ошибки:


Более важно откуда. Посмотри стек вызова на момент ошибки.


 
TForm   (2006-07-28 03:46) [49]

Запутал в корень всех, своим кодом? Все догадки пропали... или наоборот стоко дофига, что и незнай с чего начать?


 
TForm   (2006-07-28 04:00) [50]

Извеняюсь за  [49] TForm   (28.07.06 03:46) чего то обнавилась страница не вовремя.
> [48] ЮЮ ©   (28.07.06 03:16)


> Более важно откуда. Посмотри стек вызова на момент ошибки.

Здесь я ничего не понял.
Каким образом это сделать, и на что конкретно нужно смотреть?

const
MAX_SND   = 13;
MAX_PICTS = 8;

type
TP = record                    
 BMP:  TBitMap;            
 Name: String;            
end;
TPs = array [1..MAX_PICTS] of TP;

TRSound = record
 Snd      : HSTREAM;
 StreamRes: TResourceStream;
end;
TRSounds = array [0..MAX_SND] of TRSound;

var      P: TPs;
 SoundRes: TRSounds;


Это все в этом же модуле c формой


 
ЮЮ ©   (2006-07-28 04:12) [51]

var      P: TPs;
SoundRes: TRSounds;

Это все в этом же модуле c формой


глобальные переменные, что-ли? Перенеси их в поля формы!!!


 
ЮЮ ©   (2006-07-28 04:19) [52]

Или у тебя бывает только один экземпляр этой формы создан? Если да, то это, конецно, не критично


 
ЮЮ ©   (2006-07-28 04:23) [53]

кстати, после Tm1.Enabled:=False можно поставить Tm1.Clear, что, по-идее, исключит возможность попадания в TRxTimerList.RemoveItem в дальнейшем.


 
TForm   (2006-07-28 16:04) [54]

Переменные глобальные, описаны в модуле с формой.

> ЮЮ ©   (28.07.06 04:19) [52]

Так точно, в один момент времени загружена 1 форма из DLL ну и форма из exe, которая присутствует всегда.

> ЮЮ ©   (28.07.06 04:23) [53]
> кстати, после Tm1.Enabled:=False можно поставить Tm1.Clear

Спасибо, попробую.
Только Tм1 - это просто таймер, надо у ТмLs Clear сделать. Это я так, для себя.
P.S. > Более важно откуда. Посмотри стек вызова на момент ошибки.
И все же, как это сделать?


 
TForm   (2006-07-28 21:02) [55]

> [53] ЮЮ ©   (28.07.06 04:23)

Сделал после Tm1.Enabled:=False - Tm1.Clear;
Молодец! Спасибо!
Конечно это решило проблему (мою), но почему так происходило - ответа нет.
Хотелось бы услышать обаснованный ответ по вопросу.
Ну что бы не делать таких ошибок в дальнейшем. т.е. суть ошибки не понял.
Дело то наверное не RxTimersList"e - ведь если Exit; ставил перед убиванием TBitMap"ов ошибки то не было....


 
GrayFace ©   (2006-07-29 01:48) [56]

ЮЮ ©   (28.07.06 3:16) [48]
Посмотри стек вызова на момент ошибки.

Э.. А как?

TForm   (28.07.06 21:02) [55]
Дело то наверное не RxTimersList"e - ведь если Exit; ставил перед убиванием TBitMap"ов ошибки то не было....

Но убивание битмепок-то точно не при чем. Лучше всего посмотреть, что делается в исходниках RxTimersList.Clear


 
TForm   (2006-07-29 23:56) [57]

> [56] GrayFace ©   (29.07.06 01:48)
> Лучше всего посмотреть, что делается в исходниках RxTimersList.Clear

А чего там может делаться, очищаються таймеры из списка по "одному"
> Но убивание битмепок-то точно не при чем.
Да вот и я уже всю башню изломал, непойму что здесь при чем?
Да и ЮЮ чегото не говорит про стек вызовов, т.е. как его посмотреть и, самое главное, что там нужно увидеть....:(


 
TForm   (2006-07-30 18:41) [58]

Ну ладно, если все молчат, значит либо не знают, либо.....
Тема закрыта.
Спасибо всем.



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

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

Наверх




Память: 0.58 MB
Время: 0.042 c
15-1153863014
Footballer
2006-07-26 01:30
2006.08.20
INSTALLER


15-1153718947
Ega23
2006-07-24 09:29
2006.08.20
С Днём рождения! 22 июля


1-1152025091
Piter
2006-07-04 18:58
2006.08.20
Непонятная работа FindFirst / FindNext


9-1132981739
rtyrt
2005-11-26 08:08
2006.08.20
Как определить поддерживается ли OpenGL аппаратно или нет?


15-1153331373
Юрий Зотов
2006-07-19 21:49
2006.08.20
Что Вы думаете о буквоедах?