这是动态库中的说明原型 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中如何解释?坐等大仙!

解决方案 »

  1.   

    把 pas 文件,放到CB中一編譯,就會產生正確的頭文件。
    這樣的翻譯是官方的,最為精確。手工翻譯成 CB 代碼,容易錯。
      

  2.   

    也可以在 delphi 中編譯, 更改編譯選,產生對應的 .h 頭文件,也可以得到對應的 CB 代碼。
      

  3.   


    请问大大在那个选项卡里面修改,我记得BCB 发布的时候需要修改compiler packages 和linker 3项,而deiphi要输出bcb的 头文件具体步骤是什么,感谢
      

  4.   

    c++builder里也有事件啊,比如你放一个按钮在FORM上,双击就打开发CLIECK事件写上你的代码,运行,点击按钮,就执行你的代码
      

  5.   

    请问 大大我这样的写法哪里有问题 ?
    .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);
      

  6.   

    FunOnDeviceLogin OnDeviceLogin;
    FunOnRefreshDeviceStateBySerial OnRefreshDeviceStateBySerial;
    FunOnRefreshDeviceStateBySerial OnRefreshDeviceStateBySerial;你定义了函数指针,但是没有指向具体的函数,如果使用的话,就是使用未初始化的指针,很多情况下这些函数指针是指向 NULL 的,但也不一定。这就是你说的:“为什么我调用回调函数的时候都里面的参数都是空”。如果你定义了相关函数,只需要传入函数名称就可以做参数的了,不需要另外定义一个指针的。另外,你定义的函数:
    void __fastcall OnDeviceLogin(int Dev_id,TSerialType Serial,char* ip,int port,int & heartbeat)
    {
    ...
    }
    CALLBACK 函数不是 __fastcall 的吧。
    注意不要写成类中的函数,也就是 CALLBACK 函数不是 __closeure的.