请问VC中的 (pHeader+1)->m_pReport 转成delphi该如何表示??? 给分!!! 请问VC中的 (pHeader+1)->m_pReport 转成delphi该如何表示??? 给分!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果pHeader是一个指针列表(假定是个类似TList的对象列表),(pHeader.Items[1]).m_pReport 我的pHeader是一个指向一个记录类型定义的指针.请问该如何表示??? 请问,要实现类似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; pHeader+1等于Inc(pHeader);步长加1把C的定义拿来看看 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该如何表示??? 定义对了。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;这个和上面的效果一样 但进行Inc操作后pHeader的地址已经改变,所以如果在继续有:(pHeader+2)->m_pReport 时,就只是Inc(pHeader, 1),不能是2了,,首地址的概念 TStringList 遍历数据问题 Merry Christmas TListview,如何可以实现在点击标题栏时重新排序? 在各种数据库中(如oracle,sql server,interbase等等),修改表名和列名的sql语句一样吗?(请给出详解) 辞职散分 为什么这段过程只能找*.txt的文件 急求 计算器代码 D5的问题 Delphi 的小问题 刚提的问题一下就没了????分不够就加 《Delphi7高效率数据库程序设计》附书光盘中找不到D7Books.GDB文件??? SQLSERVER 2000 存储过程为何出错??
请问该如何表示???
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;
等于Inc(pHeader);步长加1把C的定义拿来看看
{
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该如何表示???
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;
这个和上面的效果一样
(pHeader+2)->m_pReport
时,就只是Inc(pHeader, 1),不能是2了,,首地址的概念