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

Вниз

Глючит CharToOEM   Найти похожие ветки 

 
Voldemar   (2002-06-26 19:58) [0]

Доброе время суток!
У меня странно глючит вот такой код:
var TS1, TS2: TStringList;
cnd: cardinal;
St1, St2: PChar;



begin
TS1:=TStringList.Create;
TS2:=TStringList.Create;
try
TS1.LoadFromFile(ParamStr(1));
except
begin
writeln("File not found!");
exit;
end;
end;

for cnd:=0 to TS1.Count-1 do begin
St1:=Pchar(TS1.Strings[cnd]);
St2:=AllocMem(Length(St1));
CharToOem(St1,St2);
TS2.Add(string(St2));
FreeMem(St2);
end;

TS2.SaveToFile(ChangeFileExt(ParamStr(1),".cnd"));
TS1.Free;
TS2.Free;
end.

Когда запускаешь из IDE - выдает EInvalidPointer, а когда из шелла - выкидывает ошибку "Неизвестное программное исключение в модуле Program.exe"
Причем результирующий файл пишется правильно! Пробовал отловить зависимость от размера файла (до 30000 строк), от размера строки (до 700 символов) - не нашел :(. Т.е. может проглотить огромную строку, а на коротенькой глюкнуть. Даже на какой конкретно команде вылетает ошибка, определить не могу, но где-то внутри цикла.


 
rhf   (2002-06-26 20:04) [1]

при работе с чарТоОем и оемТоЧар можно и даже полезно в качестве параметров передавать одну и ту же переменную....


 
rhf   (2002-06-26 20:15) [2]

твой кусок кода у меня работает...без ошибок.... вот только результаты неправильные :(

делай лучше так

for cnd:=0 to TS1.Count-1 do begin
St1:=Pchar(TS1.Strings[cnd]);
CharToOem(St1,St1);
TS2.Add(string(St1));
end;


 
Voldemar   (2002-06-26 20:43) [3]

> rhf © (26.06.02 20:15)
так лучше, но когда файл больше 1.5 метров, вылетает ошибка Память не может быть "written"...


 
rhf   (2002-06-26 21:03) [4]

а при чем тут размер файла... не понятно... в каком месте он вылетает.......

кстати можно сделать все без цикла


st1:=ts.getText;
charToOem(st1,st1);
ts.text:=string(st1);


тестил на 2 с половиной метрах.......


 
Voldemar   (2002-06-26 23:02) [5]

>rhf © (26.06.02 21:03)
Оказалось, размер не причем... Сгенерил файл около 200 метров - нормально отработало... А вот на одном конкретном файле глючит. В шелле вылетает ошибка Exception EAccessViolation in module user32.dll at 000234D3.
Попробую сделать последним способом:)


 
Voldemar   (2002-06-26 23:17) [6]

Вот теперь получилось! И даже на 200-метровом файле... Спасибо огромное, а я-то му**лся :))



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

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

Наверх





Память: 0.46 MB
Время: 0.005 c
1-23597
.: Joiro :.
2002-06-25 12:22
2002.07.08
Временное отключение OnPaint.


3-23473
Ivan_A
2002-06-13 23:43
2002.07.08
Где найти InstallShield


1-23583
Боева Наталья
2002-06-24 04:27
2002.07.08
отчет в word


14-23734
lak_b
2002-06-06 00:26
2002.07.08
Interbase


1-23595
Filat
2002-06-17 19:05
2002.07.08
Контрольная сумма, как её создать и как проверить?





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