Autor Beitrag
reimo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: Di 26.09.06 09:39 
Habe ein Verständnisproblem mit der Funktion FileWrite! Diese ist wie folgt definiert:

function FileWrite(Handle: Integer; const Buffer; Count: LongWord): Integer;

Und ruft wiederum die Windows-Funktion WriteFile auf
WriteFile( HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten,LPOVERLAPPED lpOverlapped );

Was ich jetzt nicht ganz verstehe, ist der Übergabeparameter Buffer in der Funktion FileWrite! Was ist Buffer? Wieso hat diese Variable keinen Datentypen? Die aufgerufene Win-Funktion erwartet einen Pointer, nur wieso wird in der Funktionsdefinition beim Buffer kein datentyp angegeben? Buffer: Pointer ???
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Di 26.09.06 10:13 
Hallo,

ich kanns dir nicht sehr tiefgreifend erklären, aber vielleicht reicht dir das ja aus:
Buffer ist ohne Typ, damit du jeglichen Speicher übergeben kannst, zum Beispiel einen Array of Char o.ä. ohne dich um die Speicheradresse und den Zeiger selber kümmern zu müssen. Den Rest übernimmt die Compiler-Magie (?) für dich und übergibt das ganze dann als Zeiger der Funktion.

Gruß Hape!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
reimo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: Di 26.09.06 10:31 
Hi
danke für deine Antwort, nur leider würd ich gerne wissen, wieso und wie das funktioniert!
Dass es funktioniert, das weiss ich, verwende es ja auch...aber ich würde gerne wissen, wie das ganze funktioniert!
es gibt ja auch viele andere Delphi/Win Funktionen, welche ähnliche übergabeparameter haben, dort wird aber der übergebene Buffer als ein Pointertyp definiert...
Reinhard Kern
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Sa 30.09.06 12:12 
user profile iconreimo hat folgendes geschrieben:
Hi
danke für deine Antwort, nur leider würd ich gerne wissen, wieso und wie das funktioniert!
Dass es funktioniert, das weiss ich, verwende es ja auch...aber ich würde gerne wissen, wie das ganze funktioniert!
es gibt ja auch viele andere Delphi/Win Funktionen, welche ähnliche übergabeparameter haben, dort wird aber der übergebene Buffer als ein Pointertyp definiert...


Hallo,

das ist nur eine Vereinfachung für den Benutzer: ist ein Parameter ein Pointer, so must du eben auch einen Pointer übergeben, und zwar auch einen vom Typ her passenden - einschränkend, aber typsicher. Für const (oder var) Buffer kann man dagegen alles angeben, was eine Adresse hat, der Compiler nimmt das immer wie @Buffer. In der Funktion muss dann gecastet werden, dann erst stellen sich mögliche Fehler heraus (oder auch nicht).

Auf diese Art wird das fehleranfällige Hantieren mit Pointern vermieden.

Gruss Reinhard
reimo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: Di 10.10.06 07:55 
super! danke für die antwort!