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

Вниз

Глюк при вызове функции   Найти похожие ветки 

 
Жорик   (2004-07-20 11:39) [0]

По FormActivate вызывается функция типа String и переодически(!)
при ее вызове происходит ошибка EAccessViolation.
В самой функции ошибок нет и она выполняется от начала до конца.
К тому же если бы в функии была ошибка, то она проявлялась постоянна, а не от случая к случаю.
С чем может связана эта ошибка?
Заранее спасибо!


 
Суслик ©   (2004-07-20 11:41) [1]

очередной массовик затейник игры "а ну ка отгодай"

код приводи


 
Reindeer Moss Eater ©   (2004-07-20 11:41) [2]

С погодой на спутнике Юпитера


 
MetalFan ©   (2004-07-20 11:41) [3]

ну-ну...


 
Digitman ©   (2004-07-20 11:45) [4]


> вызывается функция типа String


поди из DLL эта ф-ция ..


 
VMcL ©   (2004-07-20 11:56) [5]

>>Жорик  (20.07.04 11:39)

Больше нечего добавить?


 
Суслик ©   (2004-07-20 11:59) [6]

он уже на другой форум пошел - здесь все пальцы гнут


 
Digitman ©   (2004-07-20 12:12) [7]

на то и пальцы


 
Жорик   (2004-07-20 12:15) [8]

функия прячет в конец картинки указанный файл (параметр strFileName) и добавляет 2
байта информации о размере картинки в конец файла для того, чтобы в дальнейшем добавленный файл
можно было извлечь из картинки.
Картинки являются ресурсами "вшитыми" в программу и извлекаются случайным образом. Всего 4
картинки.
При вызове этой функции, как я говорил, возникает ошибка EAccessViolation

function WriteFileToImage(strFileName:String):String;
const
ImgResName:array[0..3] of String =("Img1","Img2","Img3","Img4");//имена ресурсов картинок
var
DataFileBuf:array of Byte;
ImageLen:Word;
DataFileLen:DWORD;
ImageFile:String;
FD,ImgF:File;
CurDir:String;
begin
GetDir(0,CurDir);
ImageFile :=CurDir+"\"+Img00"+IntToStr(Random(10))+".jpg";//случайное имя для файла-картинки
try
ImgRes :=TResourceStream.Create(hInstance,ImgResName[Random(4)],RT_RCDATA);//извлекаем случайный
          //ресурс картинки
ImgRes.SaveToFile(ImageFile);//сохраняем в файл      
finally
ImgRes.Free;
end;
AssignFile(FD,strFileName);
AssignFile(ImgF,ImageFile);
try
Reset(FD,1);
Reset(ImgF,1);
DataFileLen :=FileSize(FD);
ImageLen :=FileSize(ImgF);
SetLength(DataFileBuf,DataFileLen);
Seek(ImgF,ImageLen);//перемещаемся на длину файла-картинки
BlockRead(FD,DataFileBuf[1],DataFileLen);//читаем файл
BlockWrite(ImgF,DataFileBuf[1],DataFileLen);//записываем в конец картинки весь файл
BlockWrite(ImgF,ImageLen,SizeOf(Word));//запоминем длину картинки, чтобы потом можно было
finally           //извлечь файл из нее файл
CloseFile(FD);
CloseFile(ImgF);
DeleteFile(strFileName);
end;
Result :=ImageFile;
end;


 
Суслик ©   (2004-07-20 12:18) [9]

я не буду это даже смотреть.
я что - сам должен выравнивание по левому краю делать?


 
clickmaker ©   (2004-07-20 12:21) [10]

Randomize вызвал перед Random?
Проверь еще ImgRes <> nil


 
Жорик   (2004-07-20 12:28) [11]

Функция выполняется полностью и "упаковывает" файл вполне успешно. А Randomize я просто забыл написать она вызывается перед строкой ImageFile :=CurDir+"\"+Img00"+IntToStr(Random(10))+".jpg"


 
Digitman ©   (2004-07-20 12:50) [12]


> Жорик


c какого перепугу индексация эл-тов дин.массива у тебя начинается с единицы ?


 
Жорик   (2004-07-20 12:53) [13]

c какого перепугу индексация эл-тов дин.массива у тебя начинается с единицы ?</>
Насколько я помню если с 0 компилятор начинает ругаться.
А это может быть как-то связано с ошибкой?


 
Суслик ©   (2004-07-20 12:55) [14]


> А это может быть как-то связано с ошибкой?

еще как


 
Digitman ©   (2004-07-20 13:09) [15]


> Насколько я помню если с 0 компилятор начинает ругаться


с какого перепугу он начнет "ругаться", если массив формируется в ран-тайм ?


 
stone ©   (2004-07-20 13:13) [16]


> try
> ImgRes :=TResourceStream.Create(hInstance,ImgResName[Random(4)],RT_RCDATA);//извлекаем
> случайный
>           //ресурс картинки
> ImgRes.SaveToFile(ImageFile);//сохраняем в файл      
> finally
> ImgRes.Free;
> end;


Забавно ты используешь try...finally


 
Суслик ©   (2004-07-20 13:16) [17]


> Забавно ты используешь try...finally

не красиво, но в данном случае, может быть и правильно, т.к. где описана ImgRes не видно - вполне может быть, что он и очищает ее в  nil :)))


 
Anatoly Podgoretsky ©   (2004-07-20 13:35) [18]

В случае возникновения ошибки при TResourceStream.Create будет в обязательном порядке вызвано ImgRes.Free; при неопределенном состоянии этого ImgRes


 
Жорик   (2004-07-20 13:52) [19]

Проблема по-видимому была именно с динамеческим массивом.
После того, как исправил DataFileBuf[1] на DataFileBuf[0], ошибка
больше не повторялась.
Всем спасибо!


 
Суслик ©   (2004-07-20 14:16) [20]


> при неопределенном состоянии этого ImgRes

это если при неопределенном.
мы то не знаем - определенное состояние или нет.


 
Anatoly Podgoretsky ©   (2004-07-20 14:25) [21]

Отсутствия знания ведет к AV


 
Суслик ©   (2004-07-20 14:26) [22]

согласен



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

Форум: "Основная";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.031 c
9-1082796215
Комбинатор
2004-04-24 12:43
2004.08.01
Проблема с туманом...


1-1090235363
Dysan
2004-07-19 15:09
2004.08.01
хранение данных в стриме


14-1089799403
Rostislav Rotaru
2004-07-14 14:03
2004.08.01
А какая разница на чем писать программы?


14-1089766612
MIGUR
2004-07-14 04:56
2004.08.01
Как копировать себя


14-1089968001
DimKa
2004-07-16 12:53
2004.08.01
За что Вам нравится данных сайт?





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