记录结构:
TRespSend = record
MsgOrd : integer;
MsgID : array [0..15] of char ;
MsgStat : byte;
end; 现在需要把一个TRespSend对象所有字段联接起来形成一个PChar.
对于PChar中的内容有格式要求,MsgOrd占11位,MsgID占16位,MsgStat占8位。所组成的PChar长度是11+16+8,而RespSend的位数是8+16+8位,这么搞是为了传递个一个DLL函数。本质上就是将一个数据拆份然后按照另一个规则重新封装起来。 目前的问题是:因为RespSend.MsgOrd传递过来时是8位,封装成PChar时要加上3位,这样到DLL就不能回复这个值了。怎么办啊? 一个思路(没有测试成功):
先定义一个
var
arr: Array[0..34] of char;
tempStr:string;
begin
tempStr : = RespSend.MsgOrd;
CopyMemory(@arr[1],PChar(tempStr),11);
CopyMemory(@arr[12],PChar(RespSend.ID),16);
CopyMemory(@arr[28],PChar(RespSend.MsgStat),8);
// ....返回@arr就行了,但是.....没有测试成功啊,看看我的代码有错误吗?有没有好的解决办法?
TRespSend = record
MsgOrd : integer;
MsgID : array [0..15] of char ;
MsgStat : byte;
end; 现在需要把一个TRespSend对象所有字段联接起来形成一个PChar.
对于PChar中的内容有格式要求,MsgOrd占11位,MsgID占16位,MsgStat占8位。所组成的PChar长度是11+16+8,而RespSend的位数是8+16+8位,这么搞是为了传递个一个DLL函数。本质上就是将一个数据拆份然后按照另一个规则重新封装起来。 目前的问题是:因为RespSend.MsgOrd传递过来时是8位,封装成PChar时要加上3位,这样到DLL就不能回复这个值了。怎么办啊? 一个思路(没有测试成功):
先定义一个
var
arr: Array[0..34] of char;
tempStr:string;
begin
tempStr : = RespSend.MsgOrd;
CopyMemory(@arr[1],PChar(tempStr),11);
CopyMemory(@arr[12],PChar(RespSend.ID),16);
CopyMemory(@arr[28],PChar(RespSend.MsgStat),8);
// ....返回@arr就行了,但是.....没有测试成功啊,看看我的代码有错误吗?有没有好的解决办法?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货