Winapi 如何在Inno安装程序中从GetVolumeInformation获取卷名?

Winapi 如何在Inno安装程序中从GetVolumeInformation获取卷名?,winapi,installation,inno-setup,pascalscript,Winapi,Installation,Inno Setup,Pascalscript,我尝试从Windows API获取Inno安装程序中的卷名。序列号返回正确,但卷名为空。我在这个线程中使用了“kobik”代码: 这是我在Inno设置中的功能: 函数FindVolumeName(const-Drive:string):string; 变量 文件系统标志:DWORD; 卷序号:DWORD; 最大组件长度:DWORD; 错误代码:整数; 体积标签:PChar; 开始 结果:=''; {关于使用RemObjects Pascal脚本传递PChars的注意:} {''传递一个nil

我尝试从Windows API获取Inno安装程序中的卷名。序列号返回正确,但卷名为空。我在这个线程中使用了“kobik”代码:

这是我在Inno设置中的功能:

函数FindVolumeName(const-Drive:string):string;
变量
文件系统标志:DWORD;
卷序号:DWORD;
最大组件长度:DWORD;
错误代码:整数;
体积标签:PChar;
开始
结果:='';
{关于使用RemObjects Pascal脚本传递PChars的注意:}
{''传递一个nil PChar}
{#0传递一个空PChar}
如果(GetVolumeInformation(pchar(驱动器)、volumeLabel、MAX_LENGTH、VolumeSerialNumber、MaximumComponentLength、FileSystemFlags、“”和0)),则
开始
结果:=WordToHex(HiWord(VolumeSerialNumber))+'-'+WordToHex(LoWord(VolumeSerialNumber));
结束
其他的
开始
错误代码:=GetLastError();
MsgBox(系统错误消息(错误代码),mbError,MB_OK);
结束;
MsgBox('VolumeLabel:'+VolumeLabel,mbInformation,MB_OK);
结束;
我不知道如何使用
PChar
类型

函数获取卷信息(
lpRootPathName:string;lpVolumeNameBuffer:string;nVolumeNameSize:DWORD;
var lpVolumeSerialNumber:DWORD;var lpMaximumComponentLength:DWORD;
var lpFileSystemFlags:DWORD;lpFileSystemNameBuffer:string;
nFileSystemNameSize:DWORD):BOOL;
外部的GetVolumeInformationW@kernel32.dllstdcall';
常数
最大路径=260;
函数FindVolumeName(const-Drive:string):string;
变量
文件系统标志:DWORD;
卷序号:DWORD;
最大组件长度:DWORD;
开始
设置长度(结果,最大路径)
如果获取卷信息(
驱动器、结果、长度(结果)、卷序列号、最大组件长度、,
文件系统标志,,,0)然后
开始
设置长度(结果,位置(#0,结果)-1);
结束
其他的
开始
RaiseException(SysErrorMessage(DLLGetLastError());
结束
结束;
(代码用于–Inno Setup 6的唯一版本)