SOS 紧急求助,指针问题(熟悉C++和Delphi的朋友请进),在线等(300)

  • 主题发起人 主题发起人 aq100
  • 开始时间 开始时间
A

aq100

Unregistered / Unconfirmed
GUEST, unregistred user!
原C++代码typedef struct tagRCV_REPORT { WORD m_cbSize; char m_szName[32]; } RCV_REPORT;typedef struct tagRCV_DATA{ int m_nPacketNum; union { RCV_REPORT* m_pReport; void * m_pData; };} RCV_DATA;LONG OnDataRec(UINT wParam,LONG lParam){ RCV_DATA * pHeader; pHeader = (RCV_DATA *)lParam; switch( wParam ) { case RCV_DATA: for(i=0
i<pHeader->m_nPacketNum
i++) { CString jc=pHeader->m_pReport.m_szName; } break; }}翻译后的Delphi代码RCV_REPORT = packed record m_cbSize:word
m_strName: array[0..31]of char
end;PRCV_REPORT=RCV_REPORT;RCV_DATA =packed record m_nPacketNum:Integer; case Integer of 0: (m_pReport:PRCV_REPORT;)
1: (m_pData:Pointer;);end;PRCV_DATA=^RCV_DATA
procedure TForm1.OnDataRec(var msg : TMessage);var pHeader:PRCV_DATA
i:integer
strTemp:String;begin case msg.WParam of RCV_DATA: begin pHeader:=PRCV_DATA(msg.LParam)
for i:=0 to pHeader.m_nPacketNum-1 do begin HexString:=''
HexString:=HexString+pHeader^.m_pReport.m_szName
{关键是底下这句,好像没起什么作用,出来的数据不对} inc(pHeader^.m_pReport)
end
end
end;inherited;end;编译执行都没问题,就是数据不对。怀疑inc(pHeader^.m_pReport);有问题,希望兄弟们指点迷津。300分以示谢意,不够可以再发300分。
 
本想写一个测试的,结果无法编译,我用的D7procedure OnDataRec(var msg: TMessage);type RCV_REPORT = packed record m_cbSize: word
m_strName: array[0..31] of char
end
PRCV_REPORT = RCV_REPORT
RCV_DATA = packed record m_nPacketNum: Integer
case Integer of 0: (m_pReport: PRCV_REPORT
)
1: (m_pData: Pointer
)
end
PRCV_DATA = ^RCV_DATA;var pHeader: PRCV_DATA
i: integer
strTemp,HexString: string;begin case msg.WParam of RCV_DATA: //编译不通过 begin pHeader := PRCV_DATA(msg.LParam)
for i := 0 to pHeader.m_nPacketNum - 1 do begin HexString := ''
HexString := HexString + pHeader^.m_pReport.m_szName
// 编译不通过 undeclared identifier 'm_szName' {关键是底下这句,好像没起什么作用,出来的数据不对} inc(pHeader^.m_pReport)
//编译不通过 end
end
end
inherited;end;
 
是个消息常量值,m_szName改成 m_strName就可以了
 
因为楼主给的代码不完整,只能猜测一下,其实结构RCV_DATA里的字段m_pReport实际上是一个结构体数组指针,它实际上指向一个数组type PRCV_REPORT=^RCV_REPORT;///////Add RCV_REPORT = packed record m_cbSize:word
m_strName: array[0..31]of char;end
TA_RCV_REPORT=array of RCV_REPORT;//////Add RCV_DATA =packed record m_nPacketNum:Integer
case Integer of 0: (m_pReport:pRCV_REPORT;);//////////Edit 1: (m_pData:Pointer;);end;PRCV_DATA=^RCV_DATA;{ TForm1 }procedure TForm1.OnDataRec(var msg: TMessage);var pHeader:PRCV_DATA
i:integer
strTemp:string;begin case msg.WParam of 0://RCV_DATA begin pHeader:=PRCV_DATA(msg.LParam)
for i:=0 to pHeader.m_nPacketNum-1 do strTemp:=TA_RCV_REPORT(pHeader.m_pReport).m_strName
end
end;end;
 
先去试试看,wangdonghai 的方式比较确切些,我写的那样也应该正确,只是里面有乱码不知道什么原因。我是要从别人的股票行情接口读数据,自己分析。wangdonghai做过股票开发吗?
 
RCV_DATA = packed record //说明RCV_DATA是个结构体,结果你还定义了一个常量也叫RCV_DATA,难怪我无法编译。 inc(pHeader^.m_pReport)
//这样C里面没有,不知道你写这个是为了什么。
 
inc(pHeader^.m_pReport)
是正确的,是指针增量移位到下一个数据地址上
 
多人接受答案了。
 
我没做过股票开发,我以前用delphi翻译c++代码的时候碰到过这种情况
 
后退
顶部