Я пытался захватить стандартный вывод и STDERR выход из DLL, составленный в MSVC++, что мой Delphi приложение статически ссылки на, но до сих пор не увенчались успехом ,Delphi - Захват стандартный вывод и вывод STDERR из статически связанного MSVC++ компилируется DLL
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;
Думал, что я был на правильном пути, но он не работает.
- Is SetStdHandle() достаточно?
- Правильно ли используется TFileStream?
- Я правильно использую TFileStream для SetStdHandle()?
- Возможно ли, что DLL устанавливает дескрипторы stdout/stderr при загрузке приложения? Если да, то где лучше всего использовать SetStdHandle() или эквивалент?
Любая помощь будет оценена по достоинству.
fmShareDenyWrite не работает с fmCreate - это просто бесполезно. fmCreate или fmShareDenyWrite = fmCreate. – kludg
Интересный Серг, да, я вижу, что fmCreate имеет значение 0xFFFF, которое сделало бы любые флаги режима обмена бесполезными. Странный. – Atorian