Thema: Delphi Festplattenzugriffe

Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#53

Re: Festplattenzugriffe

  Alt 5. Sep 2006, 17:26
Moin Mackhack,

Zitat von Mackhack:
Warum musst du hier das Struct (Record) OVERLAPPED nicht in der Delphi-Unit deklarieren aber das Struct (Record) FILE_NOTIFY_INFORMATION musst du deklariern.
Ich hatte gehofft, dass dies durch die Kommentare in der Demo deutlich geworden ist:
FILE_NOTIFY_INFORMATION musste ich selber deklarieren, da diese Deklaration bei Delphi nicht mitgeliefert wurde, OVERLAPPED hingegen schon (unit Windows).

Zitat von Mackhack:
Das ist etwas im allgemeinen das ich noch nie im Zusammenhang mit der MSDN/API verstanden habe wann ich ein Struct deklarieren muss und wann nicht. Gibt dafuer n einfaches Hint fuer mich und vlt. auch fuer viele/einige andere hier?
Selber deklarieren musst Du alles, was
  1. bei Delphi nicht deklariert wurde
  2. in einer Form deklariert wurde, die man so nicht gebrauchen kann.
    Beispiel: MSDN-Library durchsuchenExtractIconEx
    Es ist bei Delphi üblich, dass Parameter, die Werte von einer Funktion zurückerhalten als var-Parameter deklariert werden (was es ja in C nicht so gibt). Dies ist auch bei der o.g. Funktion geschehen. Will man nun aber die Liste verarbeiten, die die Funktion normalerweise zurückgibt, klappt das mit der Deklaration nicht, und man muss die Funktion, mit anderer Deklaration, selber importieren (genau für diese Funktion gibt es bei Borland sogar einen Artikel dazu)
  3. seit der mitgelieferten Deklaration in Windows aktualisiert (ergänzt) wurde, und von Dir in der aktuellen Version gebraucht wird.
    Beispiel:
    MSDN-Library durchsuchenGetOpenFilename bzw. MSDN-Library durchsuchenOPENFILENAME-Structure
    In D5 ist nur die "alte" Deklaration enthalten, ohne Placesbar.

Im Allgemeinen wirst Du oft Funktionen / Strukturen selber deklarieren müssen, die es nur unter NT/2000/XP gibt, nicht aber unter 9x/ME, da diese meist nicht vordeklariert sind.
Warum jetzt ReadDirectoryChangesW deklariert wurde, nicht aber die hierfür benötigte Struktur FILE_NOTIFY_INFORMATION müsstest Du bei Borland anfragen (zumindest konnte ich die Deklaration nirgends finden, auch nicht in D2006).

Manche Sachen, die sonst fehlen kannst Du auch woanders finden (vieles z.B. in den Jedis), aber ich verwende da lieber eigene Deklarationen (bei Funktionen), um die Funktionen C-typisch deklariert zu bekommen, also ohne var-Parameter, weil ich es damit leichter habe Beispiele umzusetzen, und mir auch keine Gedanken darum machen muss, ob das mit einem var-Parameter überhaupt wie gewünscht funktioniert (siehe ExtractIconEx).
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat