高手赐招(100分)

  • 主题发起人 主题发起人 cm
  • 开始时间 开始时间
C

cm

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button1Click(Sender: TObject);
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
Caption := IntToStr(SerialNum^);
end;


上面的程序取c盘序列号,运行正确
但是
把Caption := IntToStr(SerialNum^);
替换为(s:stringyi已定义) s:=IntToStr(SerialNum^);
就出错,为什么?如何解决
 
大家多帮忙
急用
 
是吗?
你可以跟踪看看SerialNum
的值
 
不止是计算值出错
而是程序崩溃,好像不让访问
 
var SerialNum: DWord;
a, b : DWord; Buffer : array [0..255] of Char;
s:string;
begin
if GetVolumeInformation('c:/', Buffer, SizeOf(Buffer), @SerialNum, a, b, nil, 0) then
Begin
s := IntToStr(SerialNum);
Caption := IntToStr(SerialNum);
End;
End;
PDWORD没有分配空间,显然要出错
以上通过测试
 
那为什么,把它赋值给caption就可以
实在想不通
 
Caption是一个属性,向它附值会得到保护,你的写法并非没有获得序列号,
只是将它放在一个任意区域,直接操作将被认为非法.
 
接受答案了.
 

Similar threads

S
回复
0
查看
702
SUNSTONE的Delphi笔记
S
S
回复
0
查看
697
SUNSTONE的Delphi笔记
S
I
回复
0
查看
686
import
I
I
回复
0
查看
575
import
I
后退
顶部