THardWare_Info=record //硬件信息
HW_Name:string[255];//硬件名称
HW_Content:array [0..1000] of char;//硬件描述
end;
HardWare_InfoArray: array of THardWare_Info;function TMainFrm.SetHardWareInfoBuffer(AThread: TIdPeerThread): boolean;
var
HardWare_InfoArray: array of THardWare_Info;
CountNumber, i: integer;
begin
with AThread.Connection do
begin
GetHardWare_InfoCount(CountNumber);
OpenWriteBuffer;
try
Writeinteger(CountNumber);
if CountNumber>0 then
begin
setlength(HardWare_InfoArray, CountNumber);
GetHardWare_Info(HardWare_InfoArray); //从注册表中读的信息加入列表,在转移到结构体中
for i := 0 to CountNumber - 1 do
begin
WriteBuffer(HardWare_InfoArray[i], Sizeof(HardWare_InfoArray[i]), False);
end;
end;
// CancelWriteBuffer;
CloseWriteBuffer;
except
CancelWriteBuffer;
raise;
end;
在段程序中到CloseWriteBuffer;时报错!http://photos.gznet.com/photos/1119203/1119203-GHCwmtdfna.JPG请指教!
解决方案 »
- 请哥们帮忙看看这个代码
- 获取不到动态生成的checkBox
- sql语句,提示语法错误(操作符丢失)在查询表达式'*from rc1 where 元器件ID='1''中
- 请教:用UltraEdit修改exe文件问题
- 如何通过按钮实现WINDOWS窗口的最大,恢复普通,最小化窗口按钮功能,内详!
- memo控件与word文档
- 高分求助!!!!!!!!!!!!!
- 关于在已封装单元中返回处理进度的问题
- 各位高手,请问如何在delphi的dbgird的标题栏中显示字段的描述值,而不是字段名称
- 数据迁移:二进制字段的迁移
- 我在程序中动态的创建了一个TADOStoredProc,使用完后如何彻底的删除它呢??
- 急!!请问如何把文件存入oracle数据库的blob字段???
我这段代码有问题吗!
procedure TMainFrm.GetClassDevice(var TName, TTypeInfo: TStringList);
//取得硬盘和光驱型号
var
i, j: integer;
sTempl, sTemp2, sTemp3: TStringList;
SML1, SML2,STemp: string;
Registry: TRegistry;
const
rv = 'DriverDesc';
rk = 'HARDWARE\DEVICEMAP\Scsi';
begin
Registry := TRegistry.Create;
sTempl := TStringList.Create;
try
with Registry do
begin
rootkey := HKEY_LOCAL_MACHINE;
if openkey(rk, False) then
begin
getkeynames(sTempl);
closekey;
sTemp2 := TStringList.Create;
sTemp3 := TStringList.Create;
for i := 0 to sTempl.Count - 1 do
if openkey(rk + '\' + sTempl[i] + '\Scsi Bus 0', False) then
begin
SML1 := sTempl[i];
getkeynames(sTemp2);
closekey;
for j := 0 to sTemp2.Count - 1 do
begin
SML2 := rk + '\' + SML1 + '\Scsi Bus 0\' + sTemp2[j];
if openkey(SML2, False) then
begin
getkeynames(sTemp3);
closekey;
if sTemp3.Count <> 0 then
begin
openkey(SML2 + '\Logical Unit Id 0', False);
if valueexists('Identifier') then
begin
STemp := ReadString('Identifier');
TName.Add(STemp);
end;
if valueexists('Type') then
begin
STemp := ReadString('Type');
if STemp = 'DiskPeripheral' then
TTypeInfo.Add('硬盘驱动器')
else if STemp = 'CdRomPeripheral' then
TTypeInfo.Add('光盘驱动器')
else
TTypeInfo.Add('未知驱动器')
end;
closekey;
end;
end; // break;
end;
end;
end;
end;
finally
if Assigned(Registry) then
Registry.Free;
if Assigned(sTempl) then
sTempl.Free;
if Assigned(sTemp2) then
sTemp2.Free;
if Assigned(sTemp3) then
sTemp3.Free;
end;
end;
SLTempType:= TStringList.Create;
SLTempDecs := TStringList.Create;
try
GetClassDevice(SLTempDecs, SLTempType);
for k := 0 to SLTempDecs.Count - 1 do
begin
j := j + 1;
HardWare_InfoArray[j].HW_Name := SLTempType[k];
STemp := SLTempDecs[k];
for i := 0 to length(STemp) - 1 do
begin
HardWare_InfoArray[j].HW_Content[i] := STemp[i + 1];
end;
end;
finally
if Assigned(SLTempDecs) then SLTempDecs.Free; //这边出错
if Assigned(SLTempType) then SLTempType.Free;//这边出错why end;