나는 표준 출력 내 델파이 응용 프로그램은 정적으로 연결 MSVC++에서 컴파일 된 DLL에서 표준 오류 출력을 캡처하기 위해 노력했지만, 지금까지 실패되었습니다 .는 델파이 - 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;
생각 나는 올바르게 진행되었지만 작동하지 않습니다.
- SetStdHandle() 충분합니까?
- 여기서 TFileStream을 사용하는 것이 옳은가요?
- SetStdHandle()에 TFileStream을 올바르게 사용하고 있습니까?
- 앱이로드 될 때 DLL이 stdout/stderr 핸들을 설정할 수 있습니까? 그렇다면 SetStdHandle() 또는 동급 제품을 사용하기에 가장 좋은 곳은 어디입니까?
어떤 도움을 주시면 감사하겠습니다.
fmShareDenyWrite가 fmCreate와 함께 작동하지 않습니다. 단순히 쓸모가 없습니다. fmCreate 또는 fmShareDenyWrite = fmCreate. – kludg
재미있는 Serg, 예, 나는 fmCreate가 공유 모드 플래그를 쓸모 없게 만드는 0xFFFF 값을 가지고 있음을 알았습니다. 이상한. – Atorian