Hallo!
Beim Versuch
dieses Beispiel in eine Delphi-Komponente zu packen, stoße ich schon wieder auf ein Problem.
Ich brauche diese beiden Funktionen (aus dem
MSDN kopiert):
Code:
BOOL
WINAPI WriteFileEx(
__in
HANDLE hFile,
__in_opt LPCVOID lpBuffer,
__in DWORD nNumberOfBytesToWrite,
__inout LPOVERLAPPED lpOverlapped,
__in_opt LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
Code:
BOOL
WINAPI ReadFileEx(
__in
HANDLE hFile,
__out_opt LPVOID lpBuffer,
__in DWORD nNumberOfBytesToRead,
__inout LPOVERLAPPED lpOverlapped,
__in_opt LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
Delphi-Quellcode:
type
// TODO: Use classes here in the future (if possible)
PPipeInstance = ^TPipeInstance;
TPipeInstance = record
Overlapped: TOverlapped;
PipeHandle: THandle;
chRequest: array[1..BUFSIZE] of Char;
cbRead: DWord;
chReply: array[1..BUFSIZE] of Char;
cbToWrite: DWord;
end;
...
var
PPipeInst: PPipeInstance;
AWrite: Boolean;
...
WriteFileEx(PPipeInst^.PipeHandle, @PPipeInst^.chReply[1], PPipeInst^.cbToWrite, POverlapped(PPipeInst), CompletedWriteMethod);
POverlapped(PPipeInst) schluckt er nicht, weil Delphi ein TOverlapped (_OVERLAPPED) verlangt:
Zitat:
[Pascal Fehler] NamedPipeServer.pas(70): E2010 Inkompatible Typen: '_OVERLAPPED' und 'POverlapped'
MSDN sagt aber eindeutig:
Zitat:
A pointer to an OVERLAPPED data structure...
Jetzt vermute ich einen Fehler in der Windows.pas, weshalb ich dort auch schon TOverlapped in POverlapped geändert habe. Nur schluckt er meinen Code noch immer nicht...
Wo muss man das ändern und ist das auch wirklich ein Fehler in Delphi?
Danke,
Andreas
PS: Bei ReadFileEx() verlangt Delphi wie erwartet ein POverlapped.
Andreas N.