Я пытался перехватить вывод 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;
Думал, что я на правильном пути, но это не работает.
- Достаточно ли SetStdHandle ()?
- TFileStream - это то, что нужно использовать здесь?
- Правильно ли я использую TFileStream для SetStdHandle ()?
- Возможно ли, что DLL устанавливает свои дескрипторы stdout / stderr при загрузке приложения? Если да, то где лучше всего использовать SetStdHandle () или эквивалентный?
Буду признателен за любую помощь.