Жалко. Идея была хорошая.
Есть предположение, что RTL не нравится хендл STD_OUTPUT_HANDLE типа PIPE
Цитата:
DWORD GetFileType( HANDLE hFile );
...
Value Meaning
FILE_TYPE_UNKNOWN The type of the specified file is unknown.
FILE_TYPE_DISK The specified file is a disk file.
FILE_TYPE_CHAR The specified file is a character file, typically an LPT device or a console.
FILE_TYPE_PIPE The specified file is either a named or anonymous pipe.
Проблемы со своевременной инициализацией STD_OUTPUT_HANDLE (при предварительной загрузке TestStdToLog) быть не должно. DLL инициализ. после, это слышно (см. инициализ):
Код:
MODULE TestStdToLogDll ["Project1.dll"];
PROCEDURE Test1*;
PROCEDURE Test2*;
END TestStdToLogDll.
MODULE TestTemp;
IMPORT TestStdToLogDll, Log;
PROCEDURE Do1*;
BEGIN
Log.String("Test1:"); Log.Ln;
TestStdToLogDll.Test1
END Do1;
PROCEDURE Do2*;
BEGIN
Log.String("Test2:"); Log.Ln;
TestStdToLogDll.Test2
END Do2;
END TestTemp.
^Q "Kernel.LoadMod('TestStdToLog')"
^Q TestTemp.Do1
^Q TestTemp.Do2
^Q DevDebug.UnloadThis TestStdToLog
(* Delphi dll *)
library Project1;
uses SysUtils, Classes, Windows;
{$R *.res}
procedure Test1;
begin
writeln('x'#9'='#9, 1);
end;
procedure Test2;
var n: Cardinal; res: LongBool;
begin
res := Windows.WriteFile(GetStdHandle(Windows.STD_OUTPUT_HANDLE), 'Test'#9'**'#10, 8, n, nil);
end;
exports Test1, Test2;
begin
Windows.Beep(1000, 1000)
end.