WriteFile: Unterschied zwischen den Versionen

Aus API-Wiki
Wechseln zu: Navigation, Suche
 
(9 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
<code vb>
+
__NOTOC__
 +
 
 +
 
 +
<syntaxhighlight lang="vb">
 
Declare Function WriteFile Lib "kernel32.dll" ( _
 
Declare Function WriteFile Lib "kernel32.dll" ( _
 
                 ByVal hFile As Long, _
 
                 ByVal hFile As Long, _
                 lpBuffer As Any, _
+
                 ByRef lpBuffer As Any, _
 
                 ByVal nNumberOfBytesToWrite As Long, _
 
                 ByVal nNumberOfBytesToWrite As Long, _
                 lpNumberOfBytesWritten As Long, _
+
                 ByRef lpNumberOfBytesWritten As Long, _
                 lpOverlapped As OVERLAPPED) As Long
+
                 ByRef lpOverlapped As OVERLAPPED) As Long
  
</code>
+
</syntaxhighlight>
  
  
 
==Parameter==
 
==Parameter==
  
''Arg1''
+
''hFile''
:Ein Zeiger auf XXX.
+
:Das Handle der Datei, in die geschrieben werden soll. Diese Datei muss vorher mit [[CreateFile]] geöffnet worden sein.
  
''Arg2''
+
''lpBuffer''
:Übergabe des Puffers.
+
:Der Buffer, der die zu schreibenden Daten enthält.
  
''Arg4''
+
''nNumberOfBytesToWrite''
:Übergabe eines UDT. Wenn kein Wert übergeben werden soll, muss in der Deklaration ''ByVal Arg4 as Long'', und im Funktionsaufruf ''ByVal 0&'' übergeben werden.
+
:Die Anzahl an Bytes, die es zu schreiben gilt. Es muss darauf geachtet werden, dass der in lpBuffer übergebene Wert mindestens nNumberOfBytesToWrite Byte lang ist.
  
 +
''lpNumberOfBytesWritten''
 +
:In die für lpNumberOfBytesWritten übergebene Variable wird die Anzahl tatsächlich geschriebener Bytes geschrieben.
  
==Rückgabe(n)==
+
''lpOverlapped''
 +
:Zeiger auf eine Struktur vom Typ [[OVERLAPPED]]. Die Übergabe einer solchen Struktur ermöglicht unter anderem Asynchrone Schreibzugriffe auf eine Datei. Soll keine [[OVERLAPPED]]-Struktur übergeben werden, muss bei der Deklaration
  
Die Funktion gibt einen Wert des Types ''Long'' ungleich 0 bei Erfolg, den Wert 0 bei Misserfolg zurück.
+
<syntaxhighlight lang="vb">ByVal lpOverlapped As Long</syntaxhighlight>
  
 +
:geschrieben und beim Aufruf 0 übergeben werden.
  
==[OPTIONAL] Beispiel==
 
  
<code vb>
+
==Rückgabe(n)==
Dim retVal as Long
 
Dim strOutBuffer1, strOutBuffer2 as String
 
  
retVal = XYZ(Form.hWnd, strOutBuffer1, strOutBuffer2, Byval 0&, 0)
+
Die Funktion gibt einen Wert des Types ''Long'' ungleich 0 bei Erfolg, den Wert 0 bei Misserfolg zurück.
 
 
If retVal = 0 Then
 
    'Error-Handler
 
End if
 
</code>
 
 
 
 
 
==[OPTIONAL] Hinweise==
 
  
Diese Funktion setzt die ABC - Runtime Environment voraus. Diese ist kostenlos erhältlich unter: [Adresse].
 
  
 +
==Beispiel==
  
==[OPTIONAL] Betriebsystem==
+
<syntaxhighlight lang="vb">
 +
Option Explicit
  
Die Funktion ist unter folgenden Betriebssystemen funktionsfähig:
+
Private Declare Function CreateFile Lib "kernel32" _
 +
                  Alias "CreateFileA" ( _
 +
                        ByVal lpFileName As String, _
 +
                        ByVal dwDesiredAccess As Long, _
 +
                        ByVal dwShareMode As Long, _
 +
                        ByRef lpSecurityAttributes As Any, _
 +
                        ByVal dwCreationDisposition As Long, _
 +
                        ByVal dwFlagsAndAttributes As Long, _
 +
                        ByVal hTemplateFile As Long) As Long
  
*Windows NT 4.0
+
Private Declare Function WriteFile Lib "kernel32.dll" ( _
*Windows NT 5.0 (2000)
+
                        ByVal hFile As Long, _
*Windows XP (ab SP2)
+
                        ByRef lpBuffer As Any, _
*Windows Vista (nur x64)
+
                        ByVal nNumberOfBytesToWrite As Long, _
 +
                        ByRef lpNumberOfBytesWritten As Long, _
 +
                        ByVal lpOverlapped As Long) As Long
  
 +
Private Declare Function CloseHandle Lib "kernel32" ( _
 +
                        ByVal hObject As Long) As Long
  
==[OPTIONAL] Verwandte Funktionen==
+
Private Const GENERIC_WRITE        As Long = &H40000000
 +
Private Const GENERIC_READ          As Long = &H80000000
  
[[GetLastError]] - Letzten Fehler erhalten<br>
+
Private Const FILE_SHARE_READ      As Long = &H1
[[Beep]] - Einen Ton erzeugen
+
Private Const FILE_SHARE_WRITE      As Long = &H2
  
 +
Private Const OPEN_ALWAYS          As Long = 4
  
==[OPTIONAL] Verweise==
+
Private Const INVALID_HANDLE_VALUE  As Long = -1
  
*ActiveVB Tipp 123: (Auf jeden Fall mit Link) <br>
+
Private Sub Form_Load()
*Microsoft Knowledge-Base KB123456 (Wenn möglich mit Link) <br>
+
  Dim hFile As Long, retVal As Long, BytesWritten As Long
*[http://www.activevb.de/niaslheMSDN KB123456 - How to use the Mouse]             
+
  Dim TextToWrite As String
*Allapi.net Tipp xxx
+
 
 +
  TextToWrite = "Hallo, Welt!"
 +
 
 +
  hFile = CreateFile("C:\Test.txt", GENERIC_WRITE, _
 +
                        FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_ALWAYS, 0&, 0&)
 +
 
 +
  If hFile = INVALID_HANDLE_VALUE Then
 +
      Call MsgBox("Es ist ein Fehler beim Aufruf an CreateFile aufgetreten.")
 +
      ' Der Rest wird nun nicht mehr funktionieren, Prozedur verlassen
 +
      Exit Sub
 +
  End If
 +
 
 +
  retVal = WriteFile(hFile, ByVal TextToWrite, Len(TextToWrite), BytesWritten, 0&)
 +
 
 +
  If retVal = 0 Then
 +
      Call MsgBox("Es ist ein Fehler beim Aufruf an WriteFile aufgetreten.")
 +
  End If
 +
 
 +
  Call CloseHandle(hFile)
 +
End Sub
 +
</syntaxhighlight>
  
 +
==Verwandte Funktionen==
  
 +
[[OpenFile]] - Eine Datei öffnen<br />
 +
[[CreateFile]] - Eine Datei erstellen, falls sie nicht existiert, und sie öffnen<br />
 +
[[ReadFile]] - Aus einer Datei lesen<br />
 +
[[WriteFileEx]] - Schreiben einer Datei<br />
 +
[[ReadFileEx]] - Lesen einer Datei<br />
 +
[[CloseHandle]] - Eine Datei schließen
  
==[PFLICHT] Quelle(n)==
+
==Quellen==
  
*MSDN US-Libary (nach Möglichkeit Link auf die Beschreibung).
+
[http://msdn.microsoft.com/en-us/library/aa365747.aspx MSDN Library - WriteFile]
*Andere Quellen (falls vorhanden)
 
  
 
[[Kategorie:Dateien und Laufwerke]]
 
[[Kategorie:Dateien und Laufwerke]]
 
[[Kategorie:Kernel]]
 
[[Kategorie:Kernel]]

Aktuelle Version vom 7. Oktober 2016, 22:25 Uhr


Declare Function WriteFile Lib "kernel32.dll" ( _
                 ByVal hFile As Long, _
                 ByRef lpBuffer As Any, _
                 ByVal nNumberOfBytesToWrite As Long, _
                 ByRef lpNumberOfBytesWritten As Long, _
                 ByRef lpOverlapped As OVERLAPPED) As Long


Parameter

hFile

Das Handle der Datei, in die geschrieben werden soll. Diese Datei muss vorher mit CreateFile geöffnet worden sein.

lpBuffer

Der Buffer, der die zu schreibenden Daten enthält.

nNumberOfBytesToWrite

Die Anzahl an Bytes, die es zu schreiben gilt. Es muss darauf geachtet werden, dass der in lpBuffer übergebene Wert mindestens nNumberOfBytesToWrite Byte lang ist.

lpNumberOfBytesWritten

In die für lpNumberOfBytesWritten übergebene Variable wird die Anzahl tatsächlich geschriebener Bytes geschrieben.

lpOverlapped

Zeiger auf eine Struktur vom Typ OVERLAPPED. Die Übergabe einer solchen Struktur ermöglicht unter anderem Asynchrone Schreibzugriffe auf eine Datei. Soll keine OVERLAPPED-Struktur übergeben werden, muss bei der Deklaration
ByVal lpOverlapped As Long
geschrieben und beim Aufruf 0 übergeben werden.


Rückgabe(n)

Die Funktion gibt einen Wert des Types Long ungleich 0 bei Erfolg, den Wert 0 bei Misserfolg zurück.


Beispiel

Option Explicit

Private Declare Function CreateFile Lib "kernel32" _
                  Alias "CreateFileA" ( _
                         ByVal lpFileName As String, _
                         ByVal dwDesiredAccess As Long, _
                         ByVal dwShareMode As Long, _
                         ByRef lpSecurityAttributes As Any, _
                         ByVal dwCreationDisposition As Long, _
                         ByVal dwFlagsAndAttributes As Long, _
                         ByVal hTemplateFile As Long) As Long

Private Declare Function WriteFile Lib "kernel32.dll" ( _
                         ByVal hFile As Long, _
                         ByRef lpBuffer As Any, _
                         ByVal nNumberOfBytesToWrite As Long, _
                         ByRef lpNumberOfBytesWritten As Long, _
                         ByVal lpOverlapped As Long) As Long

Private Declare Function CloseHandle Lib "kernel32" ( _
                         ByVal hObject As Long) As Long

Private Const GENERIC_WRITE         As Long = &H40000000
Private Const GENERIC_READ          As Long = &H80000000

Private Const FILE_SHARE_READ       As Long = &H1
Private Const FILE_SHARE_WRITE      As Long = &H2

Private Const OPEN_ALWAYS           As Long = 4

Private Const INVALID_HANDLE_VALUE  As Long = -1

Private Sub Form_Load()
   Dim hFile As Long, retVal As Long, BytesWritten As Long
   Dim TextToWrite As String
   
   TextToWrite = "Hallo, Welt!"
   
   hFile = CreateFile("C:\Test.txt", GENERIC_WRITE, _
                         FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_ALWAYS, 0&, 0&)
   
   If hFile = INVALID_HANDLE_VALUE Then
      Call MsgBox("Es ist ein Fehler beim Aufruf an CreateFile aufgetreten.")
      ' Der Rest wird nun nicht mehr funktionieren, Prozedur verlassen
      Exit Sub
   End If
   
   retVal = WriteFile(hFile, ByVal TextToWrite, Len(TextToWrite), BytesWritten, 0&)
   
   If retVal = 0 Then
      Call MsgBox("Es ist ein Fehler beim Aufruf an WriteFile aufgetreten.")
   End If
   
   Call CloseHandle(hFile)
End Sub

Verwandte Funktionen

OpenFile - Eine Datei öffnen
CreateFile - Eine Datei erstellen, falls sie nicht existiert, und sie öffnen
ReadFile - Aus einer Datei lesen
WriteFileEx - Schreiben einer Datei
ReadFileEx - Lesen einer Datei
CloseHandle - Eine Datei schließen

Quellen

MSDN Library - WriteFile