声明一个类(实际上是一个数据结构)
type
PPacketGeneric=^PacketGeneric;
PacketGeneric=class
dwType:dWORD;
dwSize:dWORD;
end;var
aa:array[0..7] of Byte;//用于构造内存数据
p:pbyte;
dd:PPacketGeneric;
程序内容
//构造内存数据
aa[0]:=$01;
aa[1]:=$0;
aa[2]:=$0;
aa[3]:=$0;
aa[4]:=$88;
aa[5]:=$0;
aa[6]:=$0;
aa[7]:=$0; p:=@aa;//p指向aa
*** dd:=PPacketGeneric(p);//构造p为PPacketGeneric类型,
我的目的是要是dd.dwType=1,dd.dwSize=136($88),但是上面的类型转换没有办法实现。
请问***号语句应该如何更改??
type
PPacketGeneric=^PacketGeneric;
PacketGeneric=class
dwType:dWORD;
dwSize:dWORD;
end;var
aa:array[0..7] of Byte;//用于构造内存数据
p:pbyte;
dd:PPacketGeneric;
程序内容
//构造内存数据
aa[0]:=$01;
aa[1]:=$0;
aa[2]:=$0;
aa[3]:=$0;
aa[4]:=$88;
aa[5]:=$0;
aa[6]:=$0;
aa[7]:=$0; p:=@aa;//p指向aa
*** dd:=PPacketGeneric(p);//构造p为PPacketGeneric类型,
我的目的是要是dd.dwType=1,dd.dwSize=136($88),但是上面的类型转换没有办法实现。
请问***号语句应该如何更改??
dwType:dWORD;
dwSize:dWORD;
end;改为 PacketGeneric= packed record
dwType:dWORD;
dwSize:dWORD;
end;
如果你一定要用类,那么,按照下面的方式用(注意,最后不要调用类的 Free 动态数组会自动释放)
实际上,下面是以动态数组的内存为基准的一个类
type
PacketGeneric = class
dwType:dWORD;
dwSize:dWORD;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
aa: array of Byte;//用于构造内存数据
dd: PacketGeneric;
begin
SetLength(aa, PacketGeneric.InstanceSize);
//构造内存数据
{
//以类为基准赋值
dd := PacketGeneric(@aa[0]);
PInteger(dd)^ := Integer(PacketGeneric);
dd.dwType := $1;
dd.dwSize := $88;
showmessage(format('aa[4]:$%x, aa[8]:$%x', [PDWord(@aa[4])^, PDWord(@aa[8])^]))
} //或者 以数组为基准赋值
PInteger(@aa[0])^ := Integer(PacketGeneric);
PDWord(@aa[4])^ := 1;
PDWord(@aa[8])^ := $88;
dd := PacketGeneric(@aa[0]);
showmessage(format('dwType:$%x, dwSize:$%x', [dd.dwType, dd.dwSize]))
end;