请问VC中的 (pHeader+1)->m_pReport 转成delphi该如何表示??? 给分!!!

解决方案 »

  1.   

    如果pHeader是一个指针列表(假定是个类似TList的对象列表),(pHeader.Items[1]).m_pReport
      

  2.   

    我的pHeader是一个指向一个记录类型定义的指针.
    请问该如何表示???
      

  3.   

    请问,要实现类似VC中的 (pHeader+1)->m_pReport 的引用,下面的 pHeader 的定义对吗? PRCV_DATA = ^tagRCV_DATA;
     tagRCV_DATA = record
          m_wDataType : integer;
          case Integer of
            0: ( m_pReport : PRCV_REPORT_STRUCTEx );
            1: ( m_pDay : PRCV_HISTORY_STRUCTEx );
     end;var
        pHeader : PRCV_DATA;
      

  4.   

    pHeader+1
    等于Inc(pHeader);步长加1把C的定义拿来看看
      

  5.   

    VC定义如下:typedef struct tagRCV_REPORT_STRUCTEx
    {
        WORD    m_cbSize;
        char    m_szName[STKNAME_LEN];
    }RCV_REPORT_STRUCTEx;typedef struct tagRCV_DATA
    {
        int                 m_wDataType;  
        union
        {
            RCV_REPORT_STRUCTEx  *  m_pReport;
            RCV_HISTORY_STRUCTEx *  m_pDay; 
        };
    } RCV_DATA;RCV_DATA * pHeader=(RCV_DATA*)lPara; // lPara是消息发来的 LPARAM,类型是 LONG请问如何将VC中的 (pHeader+1)->m_pReport 转成delphi该如何表示???
      

  6.   

    定义对了。RCV_DATA * pHeader=(RCV_DATA*)lPara; // lPara是消息发来的 LPARAM,类型是 LONGvar 
      pHeader: PRCV_DATA;
    begin
      pHeader := PRCV_DATA(lPara);
      // (pHeader+1)->m_pReport ==>
      PRCV_DATA(Integer(pHeader) + SizeOf(tagRCV_DATA) * 1)^.m_pReport....
    end;PRCV_DATA(Integer(pHeader) + SizeOf(tagRCV_DATA) * 1)
    就是将它的地址加上步长,生成一个新的PRCV_DATA地址。也可以这样做:
    var 
      pHeader: PRCV_DATA;
    begin
      pHeader := PRCV_DATA(lPara);
      // (pHeader+1)->m_pReport ==>
      Inc(pHeader);  //inc就是增加了SizeOf(tagRCV_DATA)的长度
      pHeader^.m_pReport ....
    end;
    这个和上面的效果一样
      

  7.   

    但进行Inc操作后pHeader的地址已经改变,所以如果在继续有:
    (pHeader+2)->m_pReport 
    时,就只是Inc(pHeader, 1),不能是2了,,首地址的概念