Einzelnen Beitrag anzeigen

EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#1

ReadFileEx/WriteFileEx verwenden: Fehler in Windows.pas?

  Alt 2. Feb 2008, 18:16
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.
  Mit Zitat antworten Zitat