TData = record Fid :array[0..50] of byte; FCmd :array[0..101] of byte; FMgs :array[0..101] of byte; FClientFlag :array[0..101] of byte; FDataSize :array[0..8] of byte; FIsList :array[0..1] of byte; FData :array[0..120] of String; 这句话定义的有问题,得不到正确的长度。要用定长结构,简单点得改法把string改为string[255] end;
其中,sizeof(Msg_ZC)有问题,关键是你的结构定义中不要用String类型,可这样定义:
TData = record
...
FData :array[0..120] of String[255];
end;
这样FData的长度固定了。
你可做个测试,如:
TTest=record
a:integer;//占4个字节
s:string;
end;然后写段程序:
var v:TTest;
begin
v.a := 0;
v.s := '01234567890123456789';
showmessage(inttostr(sizeof(v))+','+inttostr(sizeof(TTest)));
end;
改变v.s的长度,你看看结果如何?
你的这个“invalid pointer operation”错误可能是调用DLL产生的,你可以试试一个简单的程序加载调用opcauto.dll看是否也会出错。
Fid :array[0..50] of byte;
FCmd :array[0..101] of byte;
FMgs :array[0..101] of byte;
FClientFlag :array[0..101] of byte;
FDataSize :array[0..8] of byte;
FIsList :array[0..1] of byte;
FData :array[0..120] of String; 这句话定义的有问题,得不到正确的长度。要用定长结构,简单点得改法把string改为string[255]
end;