Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.036 c
15-1153378988
McSimm
2006-07-20 11:03
2006.08.20
Сергею (Джо)


8-1140424615
barakuda
2006-02-20 11:36
2006.08.20
освобождение памяти после просмотра большого JPEG


3-1150133766
kaif
2006-06-12 21:36
2006.08.20
Обрезание имен UTF-8 при добавлении юзера в IBSecurityService


1-1151732283
antoxa2005
2006-07-01 09:38
2006.08.20
Подскажите, а как отправить SMS с помощью Delphi


5-1138109150
Юрий Ж.
2006-01-24 16:25
2006.08.20
[s]RxLib for Delphi2006





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский