我想用指针 访问 结构中的数据,但是发现指针取出的数据数据不对,请dephi 高手指点??!!!!
type//结构定义哦
TLong2Uchar_Record =Record
case tag: Integer of
0: (ll : Integer);
1: (cc :Array [0..3] of Byte);
2: (ff: single);
end;
type//结构定义哦
PComm60h_Record = ^TComm60h_Record;
TComm60h_Record = Record
m_FunctionCode , m_Command: Byte;
m_Len,m_LiangChengBiaoZhi,m_JiaoZhunPoint : Byte;
m_CongZhanID,m_MuoKuaiID,m_NewMuoKuaiID : Integer;
m_Address : Integer;
m_LongCovertUchar:TLong2Uchar_Record;
end;
var
m_Comm60h_Record: TComm60h_Record;//结构定义哦
//////函数部分procedure TCanParaSetForm.Button1Click(Sender: TObject);
var
i,len: integer;
VarSendData : Variant;
p : PVariant ;//PByteArray ;
buf :Array[0..100] of BYTE;
str:String;
pStru:^TComm60h_Record;
pp:TComm60h_Record;
begin
len := sizeOf( TComm60h_Record);
VarSendData := VarArrayCreate([0,len],varbyte); //创建一个variant型数组
for i :=0 To len-1 do
buf[i] := i;
p := ( @ m_Comm60h_Record);
// Move( buf,p, len);
pStru := @ m_Comm60h_Record;
str := '1234567890';
m_Comm60h_Record.m_FunctionCode:=$60;//结构的第1个字节 60h
m_Comm60h_Record.m_Command:=00;
m_Comm60h_Record.m_Len:=4;
m_Comm60h_Record.m_LiangChengBiaoZhi:=0;
m_Comm60h_Record.m_JiaoZhunPoint:=0;
m_Comm60h_Record.m_CongZhanID:=$0022433;
m_Comm60h_Record.m_MuoKuaiID:=$00111213;
m_Comm60h_Record.m_NewMuoKuaiID:=$00111214;
m_Comm60h_Record.m_Address:=$00;
m_Comm60h_Record.m_LongCovertUchar.ff:=4.2;
//str := m_Comm60h_Record;
//??????????????????????? //问题在这?????????????????
Move( p, buf, len); //读出的 buf[0] = 220 不是60h ????????????????????
// Move(pStru, buf, len); for i:=0 To len-1 do
begin
VarSendData[i] := buf[i];
// str[i] := p[i];
end;
// VarSendData := ()p;
// SCMscomm.Output := str;//@m_Comm60h_Record;//VarSendData;
SCMscomm.Output := VarSendData;
end;
type//结构定义哦
TLong2Uchar_Record =Record
case tag: Integer of
0: (ll : Integer);
1: (cc :Array [0..3] of Byte);
2: (ff: single);
end;
type//结构定义哦
PComm60h_Record = ^TComm60h_Record;
TComm60h_Record = Record
m_FunctionCode , m_Command: Byte;
m_Len,m_LiangChengBiaoZhi,m_JiaoZhunPoint : Byte;
m_CongZhanID,m_MuoKuaiID,m_NewMuoKuaiID : Integer;
m_Address : Integer;
m_LongCovertUchar:TLong2Uchar_Record;
end;
var
m_Comm60h_Record: TComm60h_Record;//结构定义哦
//////函数部分procedure TCanParaSetForm.Button1Click(Sender: TObject);
var
i,len: integer;
VarSendData : Variant;
p : PVariant ;//PByteArray ;
buf :Array[0..100] of BYTE;
str:String;
pStru:^TComm60h_Record;
pp:TComm60h_Record;
begin
len := sizeOf( TComm60h_Record);
VarSendData := VarArrayCreate([0,len],varbyte); //创建一个variant型数组
for i :=0 To len-1 do
buf[i] := i;
p := ( @ m_Comm60h_Record);
// Move( buf,p, len);
pStru := @ m_Comm60h_Record;
str := '1234567890';
m_Comm60h_Record.m_FunctionCode:=$60;//结构的第1个字节 60h
m_Comm60h_Record.m_Command:=00;
m_Comm60h_Record.m_Len:=4;
m_Comm60h_Record.m_LiangChengBiaoZhi:=0;
m_Comm60h_Record.m_JiaoZhunPoint:=0;
m_Comm60h_Record.m_CongZhanID:=$0022433;
m_Comm60h_Record.m_MuoKuaiID:=$00111213;
m_Comm60h_Record.m_NewMuoKuaiID:=$00111214;
m_Comm60h_Record.m_Address:=$00;
m_Comm60h_Record.m_LongCovertUchar.ff:=4.2;
//str := m_Comm60h_Record;
//??????????????????????? //问题在这?????????????????
Move( p, buf, len); //读出的 buf[0] = 220 不是60h ????????????????????
// Move(pStru, buf, len); for i:=0 To len-1 do
begin
VarSendData[i] := buf[i];
// str[i] := p[i];
end;
// VarSendData := ()p;
// SCMscomm.Output := str;//@m_Comm60h_Record;//VarSendData;
SCMscomm.Output := VarSendData;
end;
解决方案 »
- 为什么Locate用了没反应?-------
- DELPHI开发招聘(北京)
- 关于一个动态创建控件的问题
- 如何用DELPHI写一个COM,连接SQL Server 2000,同时留两个接口,给别人调用。
- 两个很菜的问题
- 如何用语言来实现DBNavigator中的“+”、“-”和“ⅴ”的功能?
- 如何在局域网中进行语音传输?
- 200分!!!共享有价值的经验-----有高手乎??Delphi 操作WORD模板中的具体对象!!!
- 如何限制dbgird???
- 在Delphi中BDE创建别名后,打开数据库(不是本地的*.DB、*.DBF)时,总是提示用户和密码,其密码是什么?
- CheckListBox一行过长怎办?
- delphi 如何获取网页上的XML文件,并取得相应的内容
改
Move( p^,buf, len);
p := ( PVariant )( @ m_Comm60h_Record); 谢谢 为什么不行?
你这么转还是一个指针值。长度为4字节。
Move( p, buf, len);
等于把指针变量的内容COPY给了buf。
Move( p^,buf, len);
而这个是把指针变量所指向的内容COPY给了buf。
不行表现在什么地方?指针p指向了m_Comm60h_Record的块,可以使用。