c++源程序如下
LONG OnStkDataOK(UINT wParam,LONG lParam)
{
RCV_DATA  * pHeader;//类型说明
.....
pHeader = (RCV_DATA *)lParam;
.....
}
其中RCV_DATA数据类型定义如下
typedef struct tagRCV_DATA
{
 int  m_wDataType;  // 文件类型
 int  m_nPacketNum;  // 记录数,参见注一
 RCV_FILE_HEADEx  m_File;  // 文件接口(结构类型)
 BOOL  m_bDISK;  // 文件是否已存盘的文件
 union  //以下均是结构指针类型
 {
   RCV_REPORT_STRUCTEx  *  m_pReport;
   RCV_REPORT_STRUCTEx1 *  m_pReport1;
   RCV_HISTORY_STRUCTEx *  m_pDay;
   RCV_MINUTE_STRUCTEx  *  m_pMinute;
   RCV_POWER_STRUCTEx   *  m_pPower;
   void *  m_pData;    // 
 };
} RCV_DATA,*PRCV_DATA;以上我翻译成delphi程序如下
RCV_DAta结构定义如下
   JET_RCV_DATA=record
     m_wDataType:integer;      // 文件类型
     m_nPacketNum:integer;      // 记录数,参见注一
     m_File:JET_RCV_FILE_HEADEx;  // 文件接口(记录类型)
     m_bDISK:boolean;      // 文件是否已存盘的文件
   case integer of
     0:(m_pReport:PJET_RCV_REPORT_STRUCTEx);
     1:(m_pReport1:PJET_RCV_REPORT_STRUCTEx1);
     2:(m_pDay:PJET_RCV_HISTORY_STRUCTEx);
     3:(m_pMinute:PJET_RCV_MINUTE_STRUCTEx);
     4:(m_pPower:PJET_RCV_POWER_STRUCTEx);
     5:(m_pData:pointer);    // 
end;
   PJET_RCV_DATA=^JET_RCV_DATA;//结构指针源程序翻译如下
procedure TStockForm.OnStkDataOK(var Msg: TMessage); //Jet消息处理
var i,j:integer; stkdata:PJET_RCV_DATA;
begin
    new(stkdata);
    label1.Caption:=inttohex(msg.WParam,0)+','+inttohex(msg.LParam,0);
    stkdata:=ptr(msg.LParam);  //msg.LParam指向结构指针
.........
   dispose(stkdata);
end;以上程序运行没问题,就是在退出时总是显示‘invalid pointer operation’错误
尤其是‘stkdata:=ptr(msg.LParam);’这个语句,只要没他就不会出现上述错误,可是没他不成呀
请高手解决
  

解决方案 »

  1.   

    JET_RCV_DATA = packed record // <<<<insert packed
      

  2.   

    如果你使用消息的话,不能传递结构指针
    因为各个进程间的内存地址是相对于本进程的
    如果非要用消息传递结构,可以用WM_COPYDATA
    具体用法自己搜。
      

  3.   

    JET_RCV_DATA = packed record // <<<<insert packed
    这个不行
      

  4.   

    我确实使用消息获取结构数据指针,其c源码就是这样写的,并且她的消息编号是wm_app+1,
    我用WM_COPYDATA无法接收
      

  5.   

    这个程序是一个股票数据接收接口,我编写的的程序是接收这个接口的数据,
    我编写的这个程序原理是这样的、:1。加载接口的DLL,dll自动调出其exe窗体。2,dll程序通过事件返回数据结构指针,通过这个指针调用其中的数据