这是动态库中的说明原型 1
procedure SetUpLoadProc(vOnDeviceLogin:FunOnDeviceLogin;
vOnRefreshDeviceState: FunOnRefreshDeviceStateBySerial;
vOnRecieveBatchRecord: FunOnRecieveBatchRecordBySerial);下面是定义吧 2
type TSerialType=Array [0..16] of Char;
FunOnRefreshDeviceStateBySerial = procedure(Dev_id: integer;Serial:TSerialType; State: integer; RecordCount: integer);stdcall;
FunOnDeviceLogin=procedure(Dev_id:integer;Serial:TSerialType;ip:PChar;port:integer;
var Heartbeat:integer);stdcall;
FunOnRecieveBatchRecordBySerial=procedure(Dev_id: integer;Serial:TSerialType;index:integer;RecordCount:integer;Records: DeviceDataArray;var bReturnOK:boolean);stdcall;还有一个这个是什么意思 3
procedure OnRefreshDeviceStateBySerial(Dev_id: integer;Serial:TSerialType; State: integer; RecordCount: integer); stdcall;
procedure OnDeviceLogin(Dev_id:integer;Serial:TSerialType;ip:PChar;port:integer; var Heartbeat:integer); stdcall;
procedure OnRecieveBatchRecordBySerial(Dev_id: integer;Serial:TSerialType;index:integer;RecordCount:integer;Records: DeviceDataArray;var bReturnOK:boolean);stdcall;
调用是这样的 4SetUpLoadProc(OnDeviceLogin,OnRefreshDeviceStateBySerial,OnRecieveBatchRecordBySerial);请问在BCB中如何解释?坐等大仙!
procedure SetUpLoadProc(vOnDeviceLogin:FunOnDeviceLogin;
vOnRefreshDeviceState: FunOnRefreshDeviceStateBySerial;
vOnRecieveBatchRecord: FunOnRecieveBatchRecordBySerial);下面是定义吧 2
type TSerialType=Array [0..16] of Char;
FunOnRefreshDeviceStateBySerial = procedure(Dev_id: integer;Serial:TSerialType; State: integer; RecordCount: integer);stdcall;
FunOnDeviceLogin=procedure(Dev_id:integer;Serial:TSerialType;ip:PChar;port:integer;
var Heartbeat:integer);stdcall;
FunOnRecieveBatchRecordBySerial=procedure(Dev_id: integer;Serial:TSerialType;index:integer;RecordCount:integer;Records: DeviceDataArray;var bReturnOK:boolean);stdcall;还有一个这个是什么意思 3
procedure OnRefreshDeviceStateBySerial(Dev_id: integer;Serial:TSerialType; State: integer; RecordCount: integer); stdcall;
procedure OnDeviceLogin(Dev_id:integer;Serial:TSerialType;ip:PChar;port:integer; var Heartbeat:integer); stdcall;
procedure OnRecieveBatchRecordBySerial(Dev_id: integer;Serial:TSerialType;index:integer;RecordCount:integer;Records: DeviceDataArray;var bReturnOK:boolean);stdcall;
调用是这样的 4SetUpLoadProc(OnDeviceLogin,OnRefreshDeviceStateBySerial,OnRecieveBatchRecordBySerial);请问在BCB中如何解释?坐等大仙!
這樣的翻譯是官方的,最為精確。手工翻譯成 CB 代碼,容易錯。
请问大大在那个选项卡里面修改,我记得BCB 发布的时候需要修改compiler packages 和linker 3项,而deiphi要输出bcb的 头文件具体步骤是什么,感谢
.h 中那3个函数定义如下:
typedef void(CALLBACK* FunOnDeviceLogin)(int Dev_id,TSerialType Serial,char* ip,int port,int & heartbeat);typedef void(CALLBACK* FunOnRefreshDeviceStateBySerial)(int Dev_id,TSerialType Serial,int State,int RecordCount);typedef void(CALLBACK* FunOnRefreshDeviceStateBySerial)(int Dev_id,TSerialType Serial,int State,int RecordCount);然后我再申请一个自定义类型的原型
FunOnDeviceLogin OnDeviceLogin;
FunOnRefreshDeviceStateBySerial OnRefreshDeviceStateBySerial;
FunOnRefreshDeviceStateBySerial OnRefreshDeviceStateBySerial;然后再在。cpp中写 OnDeviceLogin OnRefreshDeviceStateBySerial OnRefreshDeviceStateBySerial 的函数体。void __fastcall OnDeviceLogin(int Dev_id,TSerialType Serial,char* ip,int port,int & heartbeat)
{
...
}
请问为什么我调用回调函数的时候都里面的参数都是空,请大大详解,十分感谢!
SetUpLoadProc(OnDeviceLogin,OnRefreshDeviceStateBySerial,OnRecieveBatchRecordBySerial);
FunOnRefreshDeviceStateBySerial OnRefreshDeviceStateBySerial;
FunOnRefreshDeviceStateBySerial OnRefreshDeviceStateBySerial;你定义了函数指针,但是没有指向具体的函数,如果使用的话,就是使用未初始化的指针,很多情况下这些函数指针是指向 NULL 的,但也不一定。这就是你说的:“为什么我调用回调函数的时候都里面的参数都是空”。如果你定义了相关函数,只需要传入函数名称就可以做参数的了,不需要另外定义一个指针的。另外,你定义的函数:
void __fastcall OnDeviceLogin(int Dev_id,TSerialType Serial,char* ip,int port,int & heartbeat)
{
...
}
CALLBACK 函数不是 __fastcall 的吧。
注意不要写成类中的函数,也就是 CALLBACK 函数不是 __closeure的.