回 帖 发 新 帖 刷新版面

主题:我在调用c写的dll程序时,退出程序时总是告诉我‘无效的指针操作’,请予解决

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);
    [b]stkdata:=ptr(msg.LParam);  [/b]//msg.LParam指向结构指针
.........
   dispose(stkdata);
end;

以上程序运行没问题,就是在退出时总是显示‘invalid pointer operation’错误
尤其是‘stkdata:=ptr(msg.LParam);’这个语句,只要没他就不会出现上述错误,可是没他不成呀
请高手解决

回复列表 (共1个回复)

沙发

我已解决了

我来回复

您尚未登录,请登录后再回复。点此登录或注册