BOOL GetVolumeInformation( LPCTSTR lpRootPathName, // address of root directory of the file system
LPTSTR lpVolumeNameBuffer, // address of name of the volume
DWORD nVolumeNameSize, // length of lpVolumeNameBuffer
LPDWORD lpVolumeSerialNumber, // address of volume serial number
LPDWORD lpMaximumComponentLength, // address of system's maximum filename length
LPDWORD lpFileSystemFlags, // address of file system flags
LPTSTR lpFileSystemNameBuffer, // address of name of file system
DWORD nFileSystemNameSize // length of lpFileSystemNameBuffer
);
调用的api函数如上所示。
但是在具体的调用中:
Function TForm1.GetDiskSerialNumber: String;
Var
VolumeSerialNumber: DWORD;
MaximumComponentLength: DWORD;
FileSystemFlags: DWORD;
SerialNumber: String;
Begin
GetVolumeInformation('C:\',
Nil,
0,
@VolumeSerialNumber,//请注意这一行
MaximumComponentLength,//请注意这一行
FileSystemFlags,//请注意这一行
Nil,
0);
SerialNumber := IntToHex(HiWord(VolumeSerialNumber), 4) +
'-' +
IntToHex(LoWord(VolumeSerialNumber), 4);
Result := SerialNumber;
End;
为什么api中都是LPDWORD 指针型,而调用的时候只有@VolumeSerialNumber为指针型,而MaximumComponentLength和FileSystemFlags不用指针!莫名其妙!
LPTSTR lpVolumeNameBuffer, // address of name of the volume
DWORD nVolumeNameSize, // length of lpVolumeNameBuffer
LPDWORD lpVolumeSerialNumber, // address of volume serial number
LPDWORD lpMaximumComponentLength, // address of system's maximum filename length
LPDWORD lpFileSystemFlags, // address of file system flags
LPTSTR lpFileSystemNameBuffer, // address of name of file system
DWORD nFileSystemNameSize // length of lpFileSystemNameBuffer
);
调用的api函数如上所示。
但是在具体的调用中:
Function TForm1.GetDiskSerialNumber: String;
Var
VolumeSerialNumber: DWORD;
MaximumComponentLength: DWORD;
FileSystemFlags: DWORD;
SerialNumber: String;
Begin
GetVolumeInformation('C:\',
Nil,
0,
@VolumeSerialNumber,//请注意这一行
MaximumComponentLength,//请注意这一行
FileSystemFlags,//请注意这一行
Nil,
0);
SerialNumber := IntToHex(HiWord(VolumeSerialNumber), 4) +
'-' +
IntToHex(LoWord(VolumeSerialNumber), 4);
Result := SerialNumber;
End;
为什么api中都是LPDWORD 指针型,而调用的时候只有@VolumeSerialNumber为指针型,而MaximumComponentLength和FileSystemFlags不用指针!莫名其妙!
解决方案 »
- Delphi中如何将二进制转换成字符串
- 菜鸟求助
- web 中能否把记录集对象传给fastreport??
- 如何在DBGRID自动POST的时候(比如我单击其他行),屏蔽掉数据库的英文错误信息,比如关键字冲突等等,给出中文提示: '出错了!'。在线给分
- 编写后台服务程序 急!急!急!急!急!
- 哪位大虾有介绍Delphi中的消息处理比较好的资料,能否给小弟共享一下?谢谢!
- 紧急求助!delphi中如何制作ado+access程序?
- delphi编译的程序在XP上显示正常,在WIN7下.乱码...
- dbgrid 显示记录时的memo字段的显示问题?
- delphi自带的桌面数据软件从昨天开始突然不能使用,为什么?
- 这种图表能不能做?
- 小弟,连这个都不懂,急请教,解决了加精。
lpRootPathName: PChar;
lpVolumeNameBuffer: PChar;
nVolumeNameSize: DWORD;
lpVolumeSerialNumber: PDWORD;
var lpMaximumComponentLength, lpFileSystemFlags: DWORD;
lpFileSystemNameBuffer: PChar;
nFileSystemNameSize: DWORD): BOOL; stdcall;
BOOL GetVolumeInformation( LPCTSTR lpRootPathName, // address of root directory of the file system
LPTSTR lpVolumeNameBuffer, // address of name of the volume
DWORD nVolumeNameSize, // length of lpVolumeNameBuffer
LPDWORD lpVolumeSerialNumber, // address of volume serial number
LPDWORD lpMaximumComponentLength, // address of system's maximumfilenamelength
LPDWORD lpFileSystemFlags, // address of file system flags
LPTSTR lpFileSystemNameBuffer, // address of name of file system
DWORD nFileSystemNameSize // length of lpFileSystemNameBuffer
);这样呀???为什么就改成var lpMaximumComponentLength, lpFileSystemFlags: DWORD;
please tell me whythanks!!
这个接口与调用相一致吧。很多API函数Delphi 都重新封装过了。
终于明白这个问题了!
看来以后调用sdk要注意这一点!
delphi也太不够意思!自己重新封装!
就应该在做一个帮助文档呀!
简直那人开涮!鄙视它!