Delphi-Quellcode:
function ShellReadThread(lpParam: Pointer): Cardinal;
var
ExitCode: Cardinal;
BytesRead: DWord;
Buffer: array[0..1024 * 8 - 1] of AnsiChar;
begin
while (not Terminated) do
begin
GetExitCodeProcess(FProcessInfo.hProcess, ExitCode);
if (ExitCode <> STILL_ACTIVE) then
begin
Terminate;
Break;
end;
if (ReadFile(hoRead, Buffer[0], Length(Buffer), BytesRead, nil)) and
(BytesRead > 0) then
begin
SendPriorityCommand(ParentThread.IDTPWriter, CMDS_SHELLOUTPUT,
@Buffer[0], BytesRead, true);
end;
Sleep(50);
end;
Result := 0;
end;
Wie man sieht landen die Daten direkt in einem ByteArray. Wenn ich die Daten an OEM2ANSI übergebe, wird das Teil halt zwangsweise kurzzeitig in einen AnsiString konvertiert.