ho cercato di catturare stdout e stderr uscita da una DLL compilata in MSVC++ che il mio Delphi app collega in modo statico, ma finora non hanno avuto successo .Delphi - Cattura stdout e l'output stderr da MSVC linkato staticamente ++ compilato 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;
Pensavo di essere sulla strada giusta, ma non funziona.
- SetStdHandle() è sufficiente?
- TFileStream è la cosa giusta da usare qui?
- Sto utilizzando TFileStream correttamente per SetStdHandle()?
- È possibile che la DLL imposti gli handle stdout/stderr quando viene caricata l'app? In tal caso, dov'è il posto migliore per utilizzare SetStdHandle() o equivalente?
Qualsiasi aiuto sarebbe apprezzato.
fmShareDenyWrite non funziona con fmCreate, è semplicemente inutile. fmCreate o fmShareDenyWrite = fmCreate. – kludg
Interessante Serg, sì, vedo che fmCreate ha un valore di 0xFFFF che renderebbe inutilizzabile qualsiasi flag di modalità di condivisione. Dispari. – Atorian