Показать сообщение отдельно
  #4  
Старый 15.12.2013, 15:37
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от 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
.....

После этих изменений должно заработать, но как я уже сказал проверить мне не на чем, возможно ещё что-то нужно поменять.
Ответить с цитированием