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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2010, 21:37   #1
ipdd
Пользователь
 
Регистрация: 19.09.2010
Сообщений: 20
По умолчанию Ошибка преобразования кодировки

При выполнении следующий код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var fi: TextFile;
i: Integer;
str,str1: PChar;
stroka: String;
begin
if SaveDialog1.Execute then
   begin
   AssignFile(fi,SaveDialog1.FileName);
   Rewrite(fi);
   Write(fi,#27);
   Write(fi,#99);
   Write(fi,#48);
   Write(fi,#4);
   for i:=0 to Memo1.Lines.Count do
      begin
      str:=PChar(Memo1.Lines[i]);
      ANSIToOEM(str,str1);
      WriteLn(fi,str1); 
     end;
   Write(fi,#12);
   CloseFile(fi);
   end;
end;
Выдает следующую ошибку:

Project1.exe raised exception class EAccessViolation with message 'Access violation at adress 77D3AF1D in module 'user32.dll'. Write of adress 00403767'

Что не так?

Последний раз редактировалось Stilet; 30.09.2010 в 08:55.
ipdd вне форума Ответить с цитированием
Старый 30.09.2010, 08:59   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Правильно ругается.
Pchar - это указатель, кто для него память выделять должен? а? Правильно! Пушкин.
Телефончик его дать?

Если нет то пиши так:
Код:
var fi: TextFile;
i: Integer;
str,str1: PChar;
stroka: String;
begin
if SaveDialog1.Execute then
   begin
   AssignFile(fi,SaveDialog1.FileName);
   Rewrite(fi);
   Write(fi,#27);
   Write(fi,#99);
   Write(fi,#48);
   Write(fi,#4);
   for i:=0 to Memo1.Lines.Count do
      begin
      stroka:=PChar(Memo1.Lines[i]);
      CharToOEM(@stroka[1],@stroka[1]);
      WriteLn(fi,stroka);
     end;
   Write(fi,#12);
   CloseFile(fi);
   end;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.09.2010, 10:18   #3
ipdd
Пользователь
 
Регистрация: 19.09.2010
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Правильно ругается.
Pchar - это указатель, кто для него память выделять должен? а? Правильно! Пушкин.
Телефончик его дать?
[/CODE]
Блин, десять тысяч спасибо! Сейчас все переделаю! Только вот если можно (мне для общего развития), объясните пожалуйста, почему для типа PChar нужно использовать указатели, а для других типов (Integer, String и т. п.) - не обязательно и можно просто использовать переменные указанных типов?...
ipdd вне форума Ответить с цитированием
Старый 30.09.2010, 11:07   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А потому что см. что я писал о нем выше, и читай литературу о указателях, как, когда и почему их используют.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение кодировки Ilya9999 PHP 2 27.05.2010 19:59
Кодировки jungle Операционные системы общие вопросы 8 08.09.2009 09:31
Кодировки Sapsan Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 21.03.2009 22:57
Кодировки BOBAH13 Общие вопросы Delphi 8 29.08.2008 14:20
Кодировки CoDeR Общие вопросы Delphi 5 01.09.2007 21:39