Einzelnen Beitrag anzeigen

Olli
(Gast)

n/a Beiträge
 
#4

Re: ReadFileScatter/WriteFileGatter

  Alt 7. Jan 2007, 06:42
Ich glaube hier liegt ein Mißverständnis über den Sinn der Funktionen vor. Sie können bspw. ja zum Datentransfer von und zu Geräten (logisch "Dateien") benutzt werden. Und da hängt es ganz vom Treiber ab, ob und wie er das implementiert und ob es dadurch schneller wird.

Auch kann es sein, daß jemand schon sowas wie einen Ringpuffer oder ähnliches hat. Dann würde ihm die Funktion u.U. entgegenkommen. Man benutzt eben immer die Werkzeuge, die einem am besten "zur Hand gehen".

Zitat von himitsu:
Code:
typedef union _FILE_SEGMENT_ELEMENT {
    PVOID64 Buffer;
    ULONGLONG Alignment;
} FILE_SEGMENT_ELEMENT;
Delphi-Quellcode:
Type FILE_SEGMENT_ELEMENT = packed Record
    Buffer: Pointer64;
    Alignment: UInt64;
  End;
wie man sieht is alles 64 Bit groß, weßhalb ich es so definiert hatte:
Delphi-Quellcode:
Type FILE_SEGMENT_ELEMENT = packed Record
    Buffer, _fill: Pointer;
    Alignment: UInt64;
  End;
Du bist lustig ... das heißt, du übergibst mal eben eine 128bit-Struktur, wo nur eine 64bit-große stehen sollte?

Zitat von himitsu:
Wenn zufällig noch jemand weiß wofür Alignment da sein soll?
Es hatte bei mir jedenfalls keine Auswirkungen und wenn MS was im Record freilassen wollte, dann heißt es ja sonst reserved, oder so.
Im PSDK steht zumindestens nichts drin.
Da es sich um eine UNION handelt, wird dieser Wert natürlich dem "Pointer" entsprechen, weshalb man durch ein einfaches logisches AND das Alignment bestimmen kann ...

Und jetzt husch husch nochmal schnell das Thema Unions in meinem DLL-Tut nacharbeiten ...:

Delphi-Quellcode:
type
FILE_SEGMENT_ELEMENT = packed record
  case Integer of
    0: (Buffer: PVOID64);
    1: (Alignment: ULONGLONG);
end;
... bei der letzten Klammer bin ich nicht sicher, ob die vor oder nach dem Semikolon stehen muß, da ich zu faul bin BDS jetzt zu starten ... achja, und die Typen mußt du natürlich auf Delphi zurechtschneidern. Habe ich hier der Einfachheit halber nicht gemacht. Bsp. #2:

Delphi-Quellcode:
type
FILE_SEGMENT_ELEMENT = packed record
  case Integer of
    0: (Buffer, _fill: Pointer);
    1: (Alignment: UInt64);
end;
  Mit Zitat antworten Zitat