掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
WriteFileの引数const Bufferとは何ですか? (ID:18781)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
まず、const Bufferという引数は、「型なしパラメータ」です。 たとえば関数に、 function Test(const Buffer): DWORD; stdcall; とあると、Bufferは、ポインタとしてスタックにPUSHされます。 また、 function Test(var Buffer): DWORD; stdcall; という記述もできます。この場合も、BufferはポインタとしてスタックにPUSHされます。 つまり、型なしパラメータ=型なしポインタ(LPVOID)です。 WriteFile APIのBufferは、constでなければなりません。 その理由は、文字列を直接指定する場合には、varだと構文エラーになるためです。 varの場合、変数に入れてからでないと、値を返せないためエラーになります。 constの場合、その引数を変更しないと言うことになり、定数も渡せるようになります。 ちなみに、ポインタとしてAPIを定義することも出来ます。 function WriteFileTest(hFile: THandle; Buffer: Pointer; nNumberOfBytesToWrite: DWORD; var lpNumberOfBytesWritten: DWORD; lpOverlapped: POverlapped): BOOL; stdcall; external kernel32 name 'WriteFile'; 使い方は、 WriteFileTest(hFile, addr(bytValue), 1, dwDummy, nil); WriteFileTest(hFile, addr(chValue), 1, dwDummy, nil); WriteFileTest(hFile, addr(intValue), 4, dwDummy, nil); WriteFileTest(hFile, addr(lngValue), 4, dwDummy, nil); WriteFileTest(hFile, addr(int64Value), 8, dwDummy, nil); WriteFileTest(hFile, PCHAR(strValue), intLen, dwDummy, nil); こんな感じになります。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.