Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2010, 19:12   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
Вопрос Ругается(Acces Violation) при чтении DAT-файла

привет всем!


Есть программа многопоточная.....
имеет 3 потока:
Первый скачивает файлы, запускается нажатием кнопки.

второй скачивает картнку и отрисовывает в Timage
третий проверяет соединение с интернет

второй, третий потоки запускаются при создании формы... в событии Create

все три потока используют информацию из TSecretAdminForm

данные с этой формы хочу хранить в DAT файле..

вот как выглядит структура и процедуры записи/чтения:
Код:
type
  TDatSettings = record
  URLLogo:string;          //данные ссылки лого
  URLRepository:string;    //данные ссылки репозитория
  URLFilesList:string;     //данные ссылки файл-листа
  HashType:Integer;        //данные о типе хеша
  AdmPassKeys:string;      //данные о доступе в админку
  URLUpdateSelf:string;    //данные ссылки на самоапдейт
  end;

procedure ReadPName;
procedure WritePName;

procedure SaveToDAT(DatFile:string);
procedure LoadFromDAT(DatFile:String);

var
  my:string;
  ini:TIniFile;


implementation

uses SecretAdminFormUnit, MainUnit;


//////Читаем структуры ДАТ файлов...
procedure SaveToDAT(DatFile:string);
var
  Data:TDatSettings;
  FS:TFileStream;
begin
  my:=ExtractFilePath(ParamStr(0));
  //записываем в структуру...
Data.URLLogo:=SecretAdminForm.LogoEdit.Text;
Data.URLRepository:=SecretAdminForm.FilesEdit.Text;
Data.URLFilesList:=SecretAdminForm.FilesListEdit.Text;
Data.HashType:=SecretAdminForm.HashGr.ItemIndex;
Data.AdmPassKeys:=SecretAdminForm.SecretKeysForThis.Text;
Data.URLUpdateSelf:=SecretAdminForm.UpdateSelfEdit.Text;

Fs:=TFileStream.Create(my+DatFile,fmCreate); //создаём файл UDBS
FS.Write(data,SizeOf(Data));    //пишем структуру в файл
FS.Free;
end;


procedure LoadFromDAT(DatFile:String);
var
  Data:TDatSettings;
  FS:TFileStream;
begin
  my:=ExtractFilePath(ParamStr(0));
  if FileExists(my+DatFile) then
  begin
  FS:=TFileStream.Create(my+DatFile,fmOpenRead);
  FS.Read(Data,SizeOf(Data));
  //читаем структуру...
SecretAdminForm.LogoEdit.Text:=Data.URLLogo;
SecretAdminForm.FilesEdit.Text:=Data.URLRepository;
SecretAdminForm.FilesListEdit.Text:=Data.URLFilesList;
SecretAdminForm.HashGr.ItemIndex:=Data.HashType;
SecretAdminForm.SecretKeysForThis.Text:=Data.AdmPassKeys;
SecretAdminForm.UpdateSelfEdit.Text:=Data.URLUpdateSelf;

FS.Free; //удаляемся
  end else
  MessageBox(0,'Файл настроек отсутствует! Будут загружены стандартные настройки','Ошибка!',MB_OK or MB_ICONERROR);
  //Сообщаем пользоватлю что файл не найден!
end;
процедура записи проходит вроде хорошо... а вот когда вызывать чтение?

если поставить на событие create последней формы то всеравно вылетает ACCES VIOLATION...


последние 2 потока запускаются так же на TAboutForm в событии Create..
есть вот это из DPR:
Код:
  Application.Initialize;
  Application.CreateForm(TMainForm, MainForm);
  Application.CreateForm(TSecretAdminForm, SecretAdminForm);
  Application.CreateForm(TSettingsForm, SettingsForm);
  Application.CreateForm(TFilesListGenForm, FilesListGenForm);
  Application.CreateForm(TAboutForm, AboutForm);
  Application.Run;

я думаю что-то, где-то пытается обратиться к ещё не созданному... но найти где это я не могу..

может я неправельно создаю/читаю DAT-файл?

Последний раз редактировалось Человек_Борща; 24.05.2010 в 20:19.
Человек_Борща вне форума Ответить с цитированием
Старый 24.05.2010, 20:18   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Народ, поможет кто-нибуть?
Человек_Борща вне форума Ответить с цитированием
Старый 25.05.2010, 16:29   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

народ ну что ни кто незнает ответа?
Человек_Борща вне форума Ответить с цитированием
Старый 25.05.2010, 19:21   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

вопрос решён..

решением стало WriteBuffer,ReadBuffer
Человек_Борща вне форума Ответить с цитированием
Старый 25.05.2010, 19:28   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

значит ошибка не в этом, так как эти процедуры используют Read/Write
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.05.2010, 19:42   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

доп. решением стало перенести все дело на панель.. а не на форму..

так как нету гемороя с ожиданием пока создастся форма..
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка "Acces violation" в чем может быть причина TRIZER Общие вопросы Delphi 2 02.05.2010 12:10
ошибка при чтении файла ongleb Общие вопросы C/C++ 17 30.07.2009 13:48
ошибка при чтении файла Alik-Soldier Общие вопросы C/C++ 1 31.05.2009 20:44
Проблема при чтении из файла Satorin Общие вопросы Delphi 2 17.12.2008 11:32
Ошибка при чтении БД из файла!! sting БД в Delphi 4 14.12.2008 22:23