有一个c++指针翻译成delphi问题(50分)

  • 主题发起人 主题发起人 vbfgm
  • 开始时间 开始时间
V

vbfgm

Unregistered / Unconfirmed
GUEST, unregistred user!
// 处理数据,实现消息处理//以下是c++源码
LONG CStkDemo::OnStkDataOK(UINT wFileType, // 文件类型, 参见 StockDrv.H
LONG lPara)
{
int i;

PBYTE pFileBuf = NULL;
RCV_DATA * pHeader;
PGZLXBINDATA pGZLX;
int j;
pHeader = (RCV_DATA *) lPara;
PBYTE pBuffx;

// 对于处理较慢的数据类型,建议将数据备份,另创建一线程处理
switch( wFileType )
{
case RCV_REPORT:
{
int nBufSize = pHeader->m_pReport[0].m_cbSize;
PBYTE pBaseBuf = (PBYTE)&pHeader->m_pReport[0]; //这句不会翻译
for(i=0; i<pHeader->m_nPacketNum; i++)
{
RCV_REPORT_STRUCTEx & Buf = *(PRCV_REPORT_STRUCTEx)(pBaseBuf + nBufSize*i );
m_Stock[m_StkPtr].Format("%6s %8s %8.3f %8.3f %8.3f %8.3f %8.3f %10.0f %10.f",
Buf.m_szLabel,Buf.m_szName,Buf.m_fNewPrice,Buf.m_fOpen,Buf.m_fLastClose,/
Buf.m_fHigh,Buf.m_fLow,Buf.m_fVolume,Buf.m_fAmount);
m_StkPtr ++;
m_StkPtr = m_StkPtr % StkBufNum;
}
}
break;
........................................
RedrawWindow();
return 0L;
}
以下是我翻译的
procedure TStockForm.OnStkDataOK(var Msg: TMessage); //Jet消息处理
var i,j,nbufsize:integer; pbasebuf:PJET_RCV_REPORT_STRUCTEx;

begin
label1.Caption:=inttohex(msg.WParam,0);
stkdata.PJet_Stock:=ptr(msg.LParam);
case msg.WParam of
Jet_RCV_REPORT: //行情数据
begin
label1.Caption:=label1.Caption+':行情数据';
j:=stkdata.PJet_Stock^.m_nPacketNum;
label2.Caption:='数据包数:'+inttostr(j);
pbasebuf:=stkdata.PJet_Stock.m_pReport ;
nbufsize:=pbasebuf^.m_cbSize ;//获取数据块大小/*这句出错显示无效的数据访问
stkdata.pBuffx:=pbyte(pbasebuf); //缓冲区指针转换为byte
label3.Caption:=inttostr(nbufsize);//(pbasebuf^.m_szLabe);
{for i:=1 to j do
begin
end;
}

m_pReport是RCV_REPORT_STRUCTEx结构指针
这个程序的意思是,消息通知一个结构数据stkdata.PJet_Stock已到来,并传递这个数据缓冲区指针lPara,
pHeader:是个复合结构,
包括m_pReport这个结构指针,
pHeader->m_nPacketNum是数据包数,pHeader->m_pReport[0]表示取第一个数据包指针,
就是 PBYTE pBaseBuf = (PBYTE)&pHeader->m_pReport[0]; 这句不知怎么翻译成delphi语言,
请高手指点
 
这是我在用delphi编写接收倚天金融快车股票程序时遇到的问题,不知道采用何种方式接收对方传来的数据
 
var
pBaseBuf:PBYTE;

Cardinal(pBaseBuf) := Cardinal(pHeader.m_pReport[0]);
 
to 爱元元的哥哥:
翻译成下面这样可以吗?如果不可以,那么究竟是为什么呢?
var
pBaseBuf: PByte;
pBaseBuf := PByte(pHeader.m_pReport[0]);
 
后退
顶部