windows - Hvordan giver jeg ReadFileEx () færdiggørelsesrutine med kontekstoplysninger?

Indlæg af Hanne Mølgaard Plasc

Problem



Win32 ReadFileEx er defineret som:


BOOL WINAPI ReadFileEx(
  \_\_in       HANDLE hFile,
  \_\_out\_opt  LPVOID lpBuffer,
  \_\_in       DWORD nNumberOfBytesToRead,
  \_\_inout    LPOVERLAPPED lpOverlapped,
  \_\_in\_opt   LPOVERLAPPED\_COMPLETION\_ROUTINE lpCompletionRoutine
);


Jeg forsøger at finde ud af, hvordan man gør færdiggørelsesrutinen (det sidste argument) påberåbe sig en dynamisk funktionspeger, når operationen er færdig. Der synes ikke at være en måde at passere i brugerdata. Eventuelle ideer?

Bedste reference


Den lpOverlappede funktion, der sendes ind i ReadFileEx, overføres til lpCompletionRoutine-funktionen.


Du kan indlejre lpOverlappet i din egen struktur og derefter bruge det til at finde pegeren til din sammenhæng:


struct ReadFileExContext
{ 
    OVERLAPPED \_Overlapped; 
    LPVOID MyContext; 
}; 


Derefter kaster du LPOVERLAPPED til en ReadFileContext i din tilbagekaldsfunktion, og du er god til at gå.

Andre referencer 1


Gjorde noget IO arbejde i dag og bemærkede i WSA og File read/write funktioner siges det, at hEvent af OVERLAPPED strukturen ikke bruges, hvis du bruger en færdiggørelsesrutine, f.eks. fra ReadFileEx



  ReadFileEx-funktionen ignorerer overlAPPED-strukturen s hEvent-medlem. En ansøgning er fri til at bruge dette medlem til eget formål i forbindelse med et ReadFileEx-opkald. ReadFileEx signaler afslutter sin læseoperation ved at ringe eller kalde et opkald til færdiggørelsen rutine pegede på af lpCompletionRoutine, så det behøver ikke et arrangementshåndtag.


Andre referencer 2


Du kan bruge Tråd Lokal Lager ... Bare opret en slot og gem en peger til de data, du ønsker. Da lpCompletionRoutine kører på kaldetråden, bør du være i orden. [4]