Цитата:
Сообщение от ZILosoft
Пытался уже. Переменную data в потоке указывал ansistring но все равно на выходе имею "????????????? ???"
|
Проверить у меня не на чем (под рукой сейчас только Delphi 7), но если не ошибаюсь нужно поменять тип на "AnsiString" у переменной "sBufferOut" из модуля "unRedirect". Только обрати внимание, что эта переменная ещё используется и в качестве командной строки в "CreateProcess" - для этих целей придётся создать отдельную переменную типа "string".
Т.е. будет примерно так:
Код:
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
.....
После этих изменений должно заработать, но как я уже сказал проверить мне не на чем, возможно ещё что-то нужно поменять.