定义一个结构,
s= packed record
a:integer;
b:string;
c:real;
.
.
.
end;
结构的大小为90个字节
我要进行的操作是:把这个结构放到内存中去,然后对它进行读或者写,
问题:1:怎么申请内存块?
2:我读取或写其中的任意一个值,怎么定位?
3:我要把结构按照每16个字节或32个字节来划分,放到另外一个内存块中(这个块是以16或32个字节为单位的)?
4:我在操作时候最应该注意那些问题? 再说一遍,分不够了,我再加!!!
s= packed record
a:integer;
b:string;
c:real;
.
.
.
end;
结构的大小为90个字节
我要进行的操作是:把这个结构放到内存中去,然后对它进行读或者写,
问题:1:怎么申请内存块?
2:我读取或写其中的任意一个值,怎么定位?
3:我要把结构按照每16个字节或32个字节来划分,放到另外一个内存块中(这个块是以16或32个字节为单位的)?
4:我在操作时候最应该注意那些问题? 再说一遍,分不够了,我再加!!!
例如:
Twjh = class
public
s:string;
i:integer;
end;
到時這樣使用:
procedure TForm1.Button1Click(Sender: TObject);
var
wjh1:Twjh;
begin
wjh1:=Twjh.Create;
wjh1.s:='fdsf';
showmessage(wjh1.s)
end;
a:integer;
b:string;
c:real;
.
.
.
end;
PS = ^S;
ss: Ps; new(SS);//分配内存;
SS.a := 100;
ss.b := 'abc';
...........
PRecord = ^TMyRecord;
TMyRecord = record
a: Integer;
b: String;
c: Real;
end;var
MyList: TList;
PR: PRecord;procedure TForm1.FormShow(Sender: TObject);
begin
MyList := TList.Create;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
MyList.Free;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
New(PR);
PR.a := 1;
PR.b := 'Name';
PR.c := 100;
MyList.Add(PR);
//...
end;MyList.Insert(Index,Item);//挿入
MyList.IndexOf(Item); //定位(注:具体的使用方法看看TList)
这里b这是一个指针,字符串内容没有包含,只是将指针读入内存,而指针是可变的,你这样读入没有含义。你可以考虑用动态数组或TMemoryStream
到我个人主页 www.yixel.com
下载LexLib,使用lxcPackage.pas里面的TPackage类,看是否能够解决楼主的燃眉之急
可以运行时根据字段名称(是string类型的哦~~)来读写字段,也可以运行时生成某个结构体(可以是纯动态的,甚至是你编写代码的时候无法预知的结构),
TPackage类中用实例的PackageInstance属性来申请、释放某个结构大小的内存块,或者用lxcMemoryManager.pas中的不同的内存类来分配不同类型的内存
2:我读取或写其中的任意一个值,怎么定位?
TPackage的Access******系列属性
3:我要把结构按照每16个字节或32个字节来划分,放到另外一个内存块中(这个块是以16或32个字节为单位的)?
没相隔16/32个字节用CopyMemory来复制
4:我在操作时候最应该注意那些问题?
用完TPackage后别忘了Free
2:我读取或写其中的任意一个值,怎么定位?
你可以参见 Eastunfail(龙子龙孙)==(恶鱼杀手) 的方法
3:我要把结构按照每16个字节或32个字节来划分,放到另外一个内存块中(这个块是以16或32个字节为单位的)?
这个问题有点问题:)因为String是一个指针,呵呵,copymemory将只会将指针放到新的结构中,而不会将内容复制。如果使用arrau[0..xxx]of char的方式,就没有这个问题。
4:我在操作时候最应该注意那些问题?
个人觉得一定要实现上面的功能,最好自己定义一个类,那样的话,你的灵活度可能很高。
------------------------------------------------------------
楼主定死90字节了,你这样不太好吧?