这是在 C++ 应用程序 (exe HOST) 中定义的过程。
typedef struct _ RX_DATA_OBJ {
UINT32 TIME;
UINT32 ID;
UINT8 LEN;
UINT8 DATA[8];
} RX_DATA_OBJ;
static void RX_DATA(UINT16 CNT, RX_DATA_OBJ *p_RX_DTATA_OBJ)
我需要在用 Delphi 编写的 DLL 文件中调用上述函数作为回调。
我在 Delphi 中为我的 DLL 做了以下声明:
type
TRX_DATA_OBJ = record
time: UINT32;
id: UINT32;
len: UINT8;
data: array [0..7] of UINT8;
end;
PRX_DATA_OBJ = ^TRX_DATA_OBJ;
RX_DATA = procedure(count:UINT16; RX_DATA_OBJ: PRX_DATA_OBJ ) of object;
var
RX_DATA_out: TRX_DATA_OBJ;
在另一个过程中,我得到指向 HOST 中 RX_DATA 过程的指针。现在我在我的 DLL 中调用这个回调
procedure PUT_DATA;
begin
RX_DATA_out.Time := 100;
RX_DATA_out.id := $500;
RX_DATA_out.len := 4;
RX_DATA_out.data[0] := 1;
RX_DATA_out.data[1] := 2;
RX_DATA_out.data[2] := 3
RX_DATA_out.data[3] := 4;
RX_DATA_out.data[4] := 5;
RX_DATA_out.data[5] := 6;
RX_DATA_out.data[6] := 7;
RX_DATA_out.data[7] := 8;
RX_DATA(1, @RX_DATA_out); // RX_DATA_out is global variable defined.
end;
回调被称为正确但在 RX_DATA_out 变量中传递的数据不正确,看起来指向 RX_DATA_out 变量的指针没有指向该变量。
有人能说有什么问题吗?