俺来回答(希望楼主能奖励一套代码[
]):
首先HumAddItems肯定是一个指针(其实Delphi中的所有对象都是指针).
关键是这一句:HumAddItems := @HumanRcd.Data.HumAddItems;
他的意思是:将HumanRcd.Data.HumAddItems;这一块指针做指向的内存赋给HumAddItems指针,通常的做法应该用Move来做。如此就给HumAddItems赋值了
楼主说“HumanRcd.Data.HumAddItems是个THumAddItems结构”不知道是猜测还是原代码中的确如此?当然是记录结构也好是字符数组也好,用move都可以。小弟分析:HumanRcd是一个记录结构,它的成员Data也应该是一个记录结构,但是data的成员HumAddItems定义成记录结构或者字符Char数组都是可行的,当然如果楼主有源代码的话,那么如果原代码定义成记录结构也不影响。
THumAddItems也的确是一个数组,但是是一个字符Char数组,用Delphi表示应该是:
THumAddItems:array[0..MAXSize] of char;。
从楼主贴出的代码片段来看应该是从C++版本转换来的,小弟猜测这个定义与盛大的M2Delphi版(不是LF版本,因为按没有见过LF代码)的定义好像不同。
因为C++版本中,玩家的装备是放在一个数据库表中,也就是FLD_HAIR, FLD_DRESS_ID, FLD_WEAPON_ID,FLD_LEFTHAND_ID, FLD_RIGHTHAND_ID, FLD_HELMET_ID, FLD_NECKLACE_ID
等字段中,因此C++版本用了一个字符数组来存放这些属性,但是Delphi版本中好像并非如此。
如此分析,那么THumAddItems也就是一个PChar类型指针也就是C中的零结尾字符数组(字符串)。pTHumAddItems就可以定义成一个指向字符数组的指针。
以上是根据C++版本的分析,Delphi版本正确的定义还需要具体分析代码,因为THumAddItems也可以定义成记录结构数组。
如;THumAddItems:array[0..MAXSize] of TUSERITEM;
PUSERITEM = ^TUSERITEM;
TUSERITEM = packed record
Id: LongWord;
GoodId: Word;
// 物品id
Stand: Word;
// 当前持久值
MaxStand: Word;
// 最大持久值
keep: array[0..13] of Byte;
//保留
end;
数组元素的正确定义要根据M2和DBServer来确定。
只要确定了数组元素,那么:pTHumAddItems = ^THumAddItems;
类似的定义会同时出现在DBServer和M2中,那么这两个程序的定义就必须一致才能准确通讯。
俺研究C++版本有些时间了,愿意进一步和楼主探讨。希望能获赠楼主的代码[
]我是楼主的QQ好友[
]