WriteFileの引数について
APIを学習中の初心者です。
サンプルコードにあったのですが、test0623.txt のテキストを作成し、「abcde」と書き込むというものです。
Const GENERIC_WRITE = &H40000000
Const GENERIC_READ = &H80000000
Const FILE_ATTRIBUTE_NORMAL = &H80
Const CREATE_ALWAYS = 2
Const OPEN_ALWAYS = 4
Const INVALID_HANDLE_VALUE = -1
Private Declare Function CloseHandle Lib "kernel32" ( _
ByVal hObject As Long) As Long
Private Declare Function WriteFile Lib "kernel32" ( _
ByVal hFile As Long, lpBuffer As Any, _
ByVal nNumberOfBytesToWrite As Long, _
lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Long) As Long
Private Declare Function CreateFile Lib "kernel32" _
Alias "CreateFileA" (ByVal lpFileName As String, _
ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, _
ByVal lpSecurityAttributes As Long, _
ByVal dwCreationDisposition As Long, _
ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Sub test1()
Dim hFile As Long
Dim FileName As String
Dim Sampledata() As Byte
Dim BytesToWritten As Long
Dim SC As Long
FileName = "test0623.txt"
SC = StrConv("abcde", vbFromUnicode)
hFile = CreateFile(FileName, GENERIC_WRITE Or GENERIC_READ, _
0, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
SC = WriteFile(hFile, Sampledata(0), _
UBound(Sampledata), BytesToWritten, 0)
Call CloseHandle(hFile)
End Sub
とあったのですが質問は以下の通りです。
(1) SC = WriteFile(hFile, Sampledata(0), UBound(Sampledata), BytesWritten, 0) で、な ぜ、lpBuffer(第1引数)にSampledata(0)を指定すれば、ファイルに書き込むべきデータを保持しているバッファへのポインタになるのか?またSampledata(0)のように配列にする理由が不明?
(2) SC = WriteFile(hFile, Sampledata(0), UBound(Sampledata), BytesWritten, 0) で、なぜ、 nNumberOfBytesToWrite(第2引数)に UBound(Sampledata)を指定すれば、ファイルに書き込むべきバイト数になるのか?ここで、0を指定すると、何も書き込まないらしい。
(3) SC = WriteFile(hFile, Sampledata(0), UBound(Sampledata), BytesWritten, 0) で、なぜ、lpNumberOfBytesWritten(第3引数)に何の値も格納していない BytesWritten を記述しているのか?MSDNライブラリには、「関数から制御が返ると、この変数に、実際に書き込まれたバイト数が格納されます。」とあるので、指定しなくてよいのか?
(4) Pathを指定していないが、なぜか、C:\Users\123\Documents に作成される。
以上です。よろしくお願いします
お礼
ありがとうございました。