Ich habe versucht, stdout und Stderr Ausgabe von einer DLL in MSVC kompiliert zu erfassen ++, die meine Delphi App zu statisch verknüpft, aber bisher noch nicht erfolgreich gewesen .Delphi - Erfassung stdout und stderr Ausgabe von statisch gelinkte MSVC++ kompilierte 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;
Ich dachte, ich war auf dem richtigen Weg, aber es funktioniert nicht.
- Ist SetStdHandle() genug?
- Ist TFileStream das Richtige für Sie?
- Benutzt ich TFileStream richtig für SetStdHandle()?
- Ist es möglich, dass die DLL seine stdout/stderr-Griffe setzt, wenn die App lädt? Wenn ja, wo ist der beste Ort, um SetStdHandle() oder gleichwertig zu verwenden?
Jede Hilfe wäre willkommen.
fmShareDenyWrite funktioniert nicht mit fmCreate - es ist einfach nutzlos. fmCreate oder fmShareDenyWrite = fmCreate. – kludg
Interessanter Serg, yeah Ich sehe, dass fmCreate einen Wert von 0xFFFF hat, der alle Share-Modus-Flags nutzlos machen würde. Ungerade. – Atorian