Delphi - Получение stdout и вывод stderr от статически связанного MSVC ++ скомпилировали DLL

Я пытался получить 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;

Мысль, которой я был на правильном пути, но она не работает.

  1. SetStdHandle () достаточно?
  2. Действительно ли TFileStream является правильной вещью использовать здесь?
  3. Я использую TFileStream правильно для SetStdHandle ()?
  4. Действительно ли возможно, что DLL устанавливает свои дескрипторы stdout/stderr когда загрузки приложения? Если так, где лучшее место должно использовать SetStdHandle () или эквивалентный?

Любая справка ценилась бы.

5
задан Atorian 14 April 2010 в 18:22
поделиться

2 ответа

Если DLL захватывает дескрипторы stdout при загрузке, вам нужно будет динамически загрузить DLL после того, как вы изменили stdout обрабатывает ваш код.

7
ответ дан 14 December 2019 в 08:46
поделиться

Если ваше приложение является консольным, вы можете просто запустить его и записать все в стандартный вывод с перенаправлением. то есть

C:\MyAppWhichCallsDll.exe > c:\temp\output.log
0
ответ дан 14 December 2019 в 08:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: