WriteFile: Unterschied zwischen den Versionen

Aus API-Wiki
Wechseln zu: Navigation, Suche
Zeile 6: Zeile 6:
 
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>
 
</code>
Zeile 16: Zeile 16:
 
==Parameter==
 
==Parameter==
  
''Arg1''
+
''hFile''
:Ein Zeiger auf XXX.
+
:Das Handle der Datei, in die geschrieben werden soll. Diese Datei muss vorher mit [[CreateFile]] oder [[OpenFile]] 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.
+
<code vb>ByVal lpOverlapped As Long</code>
  
 +
:geschrieben und beim Aufruf [[NULL]] ü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>
 
  
 +
==Beispiel==
  
==[OPTIONAL] Hinweise==
+
<code vb>
 +
Option Explicit
  
Diese Funktion setzt die ABC - Runtime Environment voraus. Diese ist kostenlos erhältlich unter: [Adresse].
+
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, _
 +
                        ByRef lpOverlapped As Any) As Long
  
==[OPTIONAL] Betriebsystem==
+
Private Declare Function CloseHandle Lib "kernel32" ( _
 +
                        ByVal hObject As Long) As Long
  
Die Funktion ist unter folgenden Betriebssystemen funktionsfähig:
+
Private Const GENERIC_WRITE        As Long = &H40000000
 +
Private Const GENERIC_READ          As Long = &H80000000
  
*Windows NT 4.0
+
Private Const FILE_SHARE_READ      As Long = &H1
*Windows NT 5.0 (2000)
+
Private Const FILE_SHARE_WRITE      As Long = &H2
*Windows XP (ab SP2)
 
*Windows Vista (nur x64)
 
  
 +
Private Const OPEN_ALWAYS          As Long = 4
  
==[OPTIONAL] Verwandte Funktionen==
+
Private Const INVALID_HANDLE_VALUE  As Long = -1
  
[[GetLastError]] - Letzten Fehler erhalten<br>
+
Private Sub Form_Load()
[[Beep]] - Einen Ton erzeugen
+
  Dim hFile As Long, retVal As Long, BytesWritten As Long
 
+
  Dim TextToWrite As String
 
+
 
==[OPTIONAL] Verweise==
+
  TextToWrite = "Hallo, Welt!"
 
+
 
*ActiveVB Tipp 123: (Auf jeden Fall mit Link) <br>
+
  hFile = CreateFile("C:\Test.txt", GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_ALWAYS, 0&, 0&)
*Microsoft Knowledge-Base KB123456 (Wenn möglich mit Link) <br>
+
 
*[http://www.activevb.de/niaslheMSDN KB123456 - How to use the Mouse]             
+
  If hFile = INVALID_HANDLE_VALUE Then
*Allapi.net Tipp xxx
+
      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, ByVal 0&)
 +
 
 +
  If retVal = 0 Then
 +
      Call MsgBox("Es ist ein Fehler beim Aufruf an WriteFile aufgetreten.")
 +
  End If
 +
 
 +
  Call CloseHandle(hFile)
 +
End Sub
 +
</code>
  
 +
==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(VS.85).aspx MSDN Library - WriteFile]
*Andere Quellen (falls vorhanden)
 
  
 
[[Kategorie:Dateien und Laufwerke]]
 
[[Kategorie:Dateien und Laufwerke]]
 
[[Kategorie:Kernel]]
 
[[Kategorie:Kernel]]
[[Kategorie:Zu löschende Seiten]]
 

Version vom 16. August 2008, 13:19 Uhr




Dieser Artikel ist unvollständig bzw. inhaltlich oder sprachlich in Teilen / im Gesamten zu überarbeiten




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 oder OpenFile 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 NULL ü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, _
                        ByRef lpOverlapped As Any) 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, ByVal 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