![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
здравствуйте помогите пожалуйста разобраться в кодировке. эта программа
запускает консольное приложение и перехватывает все его сообщения и их записывает в Memo дело в том что в Delphi 7 все исправно работает а в Delphi xe5 кракозябры. я знаю что delphi с 2009 версии перешла на unicode только не могу понять как переделать это приложение. прошу пожалуйста помогите прикладываю исходый текст программы Последний раз редактировалось ZILosoft, 15.12.2013 в 02:21. |
|
#2
|
|||
|
|||
|
Укажи принудительно AnsiString с последующей переконвертацией.
|
|
#3
|
|||
|
|||
|
Пытался уже. Переменную data в потоке указывал ansistring но все равно на выходе имею "????????????? ???"
|
|
#4
|
||||
|
||||
|
Цитата:
Т.е. будет примерно так: Код:
procedure TRedirectThread.Execute;
var pa :SECURITY_ATTRIBUTES;
.....
sBufferOut :AnsiString; // Заменяем тип с string на AnsiString
s: string; // Вот здесь отдельная переменная для CreateProcess
{sBufferErr :string; //}
.....
begin
.....
// В этом куске кода формирующем командную строку для CreateProcess
// заменяем переменную sBufferOut на новую переменную s
if sProgram='' then exit
else begin
if Pos(' ',sProgram)>0 then
s := '"' + sProgram + '"'
else
s := sProgram;
if sParams<>'' then
Insert(' '+sParams,s, Length(s)+1);
end;
.....
// И в CreateProcess соответственно используем переменную s вместо sBufferOut
if CreateProcess(nil, PChar(s), nil,nil, true, 0, nil, Pointer(sWorkDir), sui, pi) then begin
.....После этих изменений должно заработать, но как я уже сказал проверить мне не на чем, возможно ещё что-то нужно поменять. |
| Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
ZILosoft (15.12.2013)
| ||
|
#5
|
|||
|
|||
|
Спасибо тебе огромное !!
Теперь все работает )) |