これは、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ファイルで上記の関数をコールバックとして呼び出す必要があります。
DLLに対してDelphiで次の宣言を行いました。
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変数へのポインターがこの変数を指していないようです。
誰かが何が間違っている可能性があるかを言うことができますか?