// 处理数据,实现消息处理//以下是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;
}
m_pReport是RCV_REPORT_STRUCTEx结构指针
这个程序的意思是,消息通知一个结构数据已到来,并传递这个数据缓冲区指针lPara,
pHeader:是个复合结构,
包括m_pReport这个结构指针,
pHeader->m_nPacketNum是数据包数,pHeader->m_pReport[0]表示取第一个数据包指针,
就是  PBYTE pBaseBuf = (PBYTE)&pHeader->m_pReport[0];  这句不知怎么翻译成delphi语言,
请高手指点

解决方案 »

  1.   

    以下是我翻译的
    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;
     }
      

  2.   

    这是我在用delphi编写接收倚天金融快车股票程序时遇到的问题,不知道采用何种方式接收对方传来的数据
      

  3.   

    这一段我也在做同样的问题。
    procedure TfrmMain.StkDataOK(var Msg:TMessage);
    var
      pHeader:PRCV_DATA;
      nBufSize:Integer;
      num:Integer;
      wFileType:Longint;
    begin
      Log(0,'收到消息...正在处理!');
      //根据内存指针读取数据
      pHeader := PRCV_DATA(Msg.LParam);
      wFileType := Msg.WParam;
      //行情数据
      if wFileType = RCV_REPORT then
      begin
        nBufSize := pHeader.m_pReport.m_cbSize;
      end
      //文件数据
      else if wFileType = RCV_FILEDATA then
      begin  end
      else
      //转为默认处理方式
      begin
        Log(0,'此消息按默认处理!');
      end;
    end;
    nBufSize这个值我就取不出来。我们可以沟通一下,我主要用银江的接口和分析家2006软件