que han estado tratando de capturar stdout y stderr salida de un archivo DLL compilado en MSVC++ que mi Delphi aplicación vincula estáticamente, pero hasta ahora no han tenido éxito .Delphi - stdout captura y la salida stderr de MSVC enlazado estáticamente ++ compilado 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;
Pensé que estaba en el camino correcto, pero no funciona.
- ¿Es SetStdHandle() enough?
- ¿Es correcto utilizar TFileStream aquí?
- ¿Estoy utilizando TFileStream correctamente para SetStdHandle()?
- ¿Es posible que la DLL establezca sus identificadores stdout/stderr cuando se carga la aplicación? Si es así, ¿dónde está el mejor lugar para usar SetStdHandle() o equivalente?
Cualquier ayuda sería apreciada.
fmShareDenyWrite no funciona con fmCreate, es simplemente inútil. fmCreate o fmShareDenyWrite = fmCreate. – kludg
Interesante Serg, sí veo que fmCreate tiene un valor de 0xFFFF que haría inútiles las banderas del modo compartir. Impar. – Atorian