我有一個從(DLL)調用的回調函數(在C++ exe應用程序中定義)。 Declaraction在DLL(C++ Builder的2009年):在回調函數中傳遞數據
typedef struct{
INT32 time_stamp;
INT32 id;
INT8 len:4;
INT8 rtr:1;
INT8 res:3;
INT8 a_data[8];
INT8 sts;
} COTI_CAN_OBJ;
typedef void (__closure __fastcall *COTI_t_UsrRxIntHdlr)(UINT16 count, COTI_CAN_OBJ far * p_obj);
當我在DLL調用這個回調是執行好,但在p_obj傳遞的值是不正確的,它看起來是從比通過不同勢的地方(地址)拍攝。
任何人都可以幫忙嗎?
這是由C++程序(主機)在我的DLL(客戶端)調用的函數和作爲參數的指針回調函數傳遞:
COTI_t_UsrRxIntHdlr local_int_hdlr;
COTI_CAN_OBJ obj;
extern "C" __declspec(dllexport) __cdecl UINT32 COTI_InitBoard(
UINT16 board_seg,
COTI_t_UsrRxIntHdlr fp_int_hdlr,
COTI_t_UsrExcHdlr fp_exc_hdlr
)
{
local_int_hdlr = fp_int_hdlr;
local_exc_hdlr = fp_exc_hdlr;
fp_int_hdlr(0,NULL);
return 1;
}
然後在另一個函數I調用回調作爲:
...
obj.id=0x701;
obj.len=5;
obj.a_data[0]=10;
obj.a_data[1]=20;
obj.a_data[2]=30;
obj.a_data[3]=40;
obj.a_data[4]=50;
local_int_hdlr(1, &obj);
...
這是在C回調函數的聲明++應用程式(主機):
static void CotiRxHandler(UINT16 count, COTI_CAN_OBJ *p_obj)
{
...
return;
}
你將不得不顯示一些真正的代碼恐怕 – 2013-03-07 12:09:00