请问那里出了问题? ( 积分: 100 )

  • 主题发起人 主题发起人 shijiesun
  • 开始时间 开始时间
S

shijiesun

Unregistered / Unconfirmed
GUEST, unregistred user!
在窗体上放一个Label1组件,再放一个Button1组件,

function GetDiskSerial(DiskChar:Char):string;
var
SerialNum:pdword;
a,b:dword;
Buffer:array[0..255] of char;
begin
if GetVolumeInformation('c:/',Buffer,SizeOf(Buffer),SerialNum,a,b,nil,0) then
Label1.Caption:=IntToStr(SerialNum^);
end;
procedure Form1.Button1click(Sender:TObject);
begin
GetDiskSerial;
end;
编译不能通过,出现提示信息为 Label1没有声明,不知什么原因?
 
Form1.Label1.Caption:=IntToStr(SerialNum^)
//Label1是Form1的,GetDiskSerial卻不是Form1的,所有找不到

GetDiskSerial;??這句沒錯嗎?GetDiskSerial('C');??
 
用function怎没有result
 
result:=IntToStr(SerialNum^);
Label1.Caption:=result;
这里改一下,后面再改一下,以后再试一下,现在机器坏了。
GetDiskSerial();
 
你的问题有好几个;
(就算加上form1.label,给调用函数加上参数 GetDiskSerial('c');
使之编译通过了,但运行还会有错,关键的地方:你没有给pdword指针开内存啊)
可用程序如下(你最好再整理下:)

function GetDiskSerial(DiskChar:Char):string;
var
SerialNum:pdword;
a,b:dword;
Buffer:array[0..255] of char;
begin
new(SerialNum);
try
if GetVolumeInformation('c:/',Buffer,SizeOf(Buffer),SerialNum,a,b,nil,0) then
form1.Label1.Caption:=IntToStr(SerialNum^);
finally
Dispose(SerialNum);
end;
end;

procedure TForm1.Button1click(Sender:TObject);
begin
GetDiskSerial('c');
end;
 
使用指针需要人工分配、释放内存吗?编译器自动分配、释放内存吧?感觉对象才需要人工分配、释放内存。
 
new()与Dispose()确实是为指针分配内存和释放内存的API函数,
 
后退
顶部