Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.08;
Скачать: CL | DM;

Вниз

Глючит 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
3-23503
Alex-A
2002-06-14 10:38
2002.07.08
Генерация ошибки в MSSQL2000 и перехват ее в Delphi


1-23581
Quad
2002-06-17 20:05
2002.07.08
Замучался я с QReport ом... ПОМОГИТЕ!!!


14-23728
PTE
2002-06-05 20:26
2002.07.08
дайте плиз русский хелп к RxDrawGrid?


7-23814
Goblinus
2002-04-16 15:59
2002.07.08
Как выдвинуть дверцу CD-ROM a?


6-23702
velk
2002-04-29 08:27
2002.07.08
Подскажите как послать сообщение по сети всем компам?