您的 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
将所有内容设置为零。使用@
而不是&
获取指向变量的指针。