|
Вопрос # 1 189/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты.
Почему, когда я вызываю процедуру записи данных
в INI-файл из обработчика события OnCreate главной формы
(или до создания главной формы), программа «вылетает» с сообщением
“Access violation at address XXXXXXXX: write at address XXXXXX. Process stopped. Use
Step or Run to continue.” Как этого избежать?
Приложение: Переключить в обычный режим-
- Procedure WriteStandartOptions;
- var IniFile: TIniFile;
- begin
- IniFile.Create(ExtractFileName(Application.ExeName) + 'AppName.ini');
- IniFile.WriteString('Options', 'Path', 'C:WINDOWS');
- IniFile.WriteInteger('Options', 'Color', clBlack);
- IniFile.Free;
- end;
-
-
-
-
- Procedure TForm1.FormCreate (Sender: TObject);
- Begin
- If not FileExists(ExtractFileName(Application.ExeName) + 'AppName.ini') Then
- WriteStandartOptions;
- end;
-
-
-
- Program Project1;
-
- Uses
- Forms,
- Unit1 in 'Unit1.pas' {Form1}
-
- {$R *.res}
-
-
-
- Begin
- If not FileExists(ExtractFileName(Application.ExeName) + 'AppName.ini') Then
- WriteStandartOptions;
-
- Application.Initialize;
- Application.CreateForm(TForm1, Form1);
- Application.Run;
- end.
-
 |
Вопрос задал: DoS (статус: 1-ый класс)
Вопрос отправлен: 10 декабря 2007, 18:59
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, @ndrew!
Для начала я бы рекомендовал бы вам поставить кнопочку на форму и вписать туда такой код
ShowMessage(ExtractFileName(Application.ExeName) + 'AppName.ini');
Я думаю, что после этого многие вопросы отпали бы:)
Если путь к ини файлу указан полный, то он создаётся там, куда указывает путь. а вот если только имя ини файла, то тут загвоздка. В таком случае он создаётся в папке Windows (в Висте говорят немного в другом месте, но сути не меняет).
наиболее правильно писать эту строку где то так
ChangeFileExt(Application.exename,'.ini')
Смотря на тот код, который вы написали, я думаю, вы хотели написать так
ExtractFilePath(Application.exename)+'AppName.ini'
Попробуйте это.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 11 декабря 2007, 01:52
Оценка за ответ: 4
|
Ответ #2. Отвечает эксперт: Косолапов Дмитрий Юрьевич
Здравствуйте, @ndrew!
Самая первая строчка неправильная. Надо:
IniFile:=TIniFile.Create...
 |
Ответ отправил: Косолапов Дмитрий Юрьевич (статус: 8-ой класс)
Время отправки: 11 декабря 2007, 08:27
Оценка за ответ: 5
Комментарий к оценке: Спасибо вам! Получилось!
|
Мини-форум вопроса
Всего сообщений: 2; последнее сообщение — 11 декабря 2007, 21:50; участников в обсуждении: 2.
|
Николай Рубан (статус: 10-ый класс), 10 декабря 2007, 19:14 [#1]:
А Вы подключили модуль Inifiles?
uses Windows, Messages,.... Inifiles;
|
|
DoS (статус: 1-ый класс), 11 декабря 2007, 21:50 [#2]:
Естественно!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|