C の例には次のコードがあります。
/* LPWSTR wszPath */
hDevice = CreateFileW(wszPath, // drive to open
0, // no access to the drive
FILE_SHARE_READ | // share mode
FILE_SHARE_WRITE,
NULL, // default security attributes
OPEN_EXISTING, // disposition
0, // file attributes
NULL); // do not copy file attributes
その関数呼び出しを Delphi に変換するには、構文を変更するだけです。
// wszPath: PWideChar
hDevice := CreateFileW(wszPath,
0,
FILE_SHARE_READ or
FILE_SHARE_WRITE,
nil,
OPEN_EXISTING,
0,
0);
つまり、:=
割り当て、or
ビット フラグの結合、nil
ヌル ポインター、および0
ヌル ファイル ハンドルに使用します。
関数は次のように呼び出されます。
#define wszDrive L"\\\\.\\PhysicalDrive0"
DISK_GEOMETRY pdg = { 0 }; // disk drive geometry structure
bResult = GetDriveGeometry (wszDrive, &pdg);
ここでも、構文を Delphi に変更します。
const wszDrive = '\\.\PhysicalDrive0';
var pdg: DISK_GEOMETRY;
ZeroMemory(@pdg, SizeOf(pdg));
bResult := GetDriveGeometry(wszDrive, @pdg);
Delphi の型指定されていない文字列定数は、コンテキスト内で必要な型に自動的に変換されるため、L
C が使用するような接頭辞は必要ありません。バックスラッシュは Delphi では特別なものではないため、エスケープする必要はありません。Delphi では、宣言でローカル変数を初期化することは許可されていないため、ZeroMemory
すべてをゼロに設定するために使用します。@
代わりに使用&
して、変数へのポインタを取得します。