Я пытался получить stdout и вывод stderr от DLL, скомпилированного в MSVC ++, который мое приложение Delphi статически связывает с, но до сих пор было неудачно.
procedure Test;
var
fs: TFileStream;
begin
fs := TFileStream.Create('C:\temp\output.log', fmCreate or fmShareDenyWrite);
SetStdHandle(STD_OUTPUT_HANDLE, fs.Handle);
SetStdHandle(STD_ERROR_HANDLE, fs.Handle);
dllFunc(0); // Writes to stdout in MSVC++ console app, but not here
// fs.Length is always zero
fs.Free;
end;
Мысль, которой я был на правильном пути, но она не работает.
Любая справка ценилась бы.
Если DLL захватывает дескрипторы stdout при загрузке, вам нужно будет динамически загрузить DLL после того, как вы изменили stdout обрабатывает ваш код.
Если ваше приложение является консольным, вы можете просто запустить его и записать все в стандартный вывод с перенаправлением. то есть
C:\MyAppWhichCallsDll.exe > c:\temp\output.log