要做一个dll,其中一个函数要求如下
int _stdcall Wt_list(CALL BACK  *GetList)(int num,PVEH_INFO info));
说明:取车辆信息列表,当主程序载入动态库后,调用此函数实现回调,实时检测计重设备回传车辆信息列表,第一条数据为没有处理的首辆车数据,并保证计重数据的一执性 顺序性和完整性.
参数:num 车数;
   info 车辆结构信息;
   typedef struct{
                         long wei; //总重
             long axistype; //轴型
             double speed;
                     }  VEH_INFO *PVEH_INFO:以前从没有做过回调函数,请高人指点一下;
这个函数定义有个call back,是否回调函数都必须这样定义,还有其它的方法吗?
另外,假设该函数已经做好,dll封装完毕,应用程序如何调用该函数,最好能给个简单的示例很着急,感谢回答,请尽量说的详细些,分不够可以再给啊

解决方案 »

  1.   

    callback是由你设计,由windows系统调用的函数。
    callback需要和某个动作关联触发,这个函数封装在dll中,就由dll载入这个函数
      

  2.   

    1、在DLL中首先声明回调函数形式
    比如:
    typedef void(WINAPI *MYCALLBACK)(int iParam,LPVOID lpParam);2、在DLL中定义供调用者使用的接口,以便调用者可以传回调函数进入DLL;
    比如:
    MYCALLBACK pFunCallback;extren "C" __declspec(dllexport) void SetCallback(MYCALLBACK pCallback)
    {
        pFunCallback = pCallback;
    }3、调用者中定义回调函数并调用SetCallback设置回调函数void WINAPI MyCallback(int iParam,LPVOID lpParam)
    {
         //to do something.
    }SetCallback(MyCallback);4、DLL中根据需要,调用回调
    ...
    ...
    pFunCallback(1,(LPVOID)NULL);
    ...就是以上4点
      

  3.   

    to involute(哼哼唧唧): 谢谢你的回答,可还是有点摸不到头脑,能否根据我具体的函数给一些指导,再次感谢!!
      

  4.   

    好吧,你的意思是DLL已经弄好了?
    恩,如果这样,咱们来看看DLL调用者。
    首先你要声明一个回调函数并传给DLL,怎么传,那个已经做好的DLL应该有传回调的接口。
    咱们看你需要定义的回调函数:
    int _stdcall GetListCallback(int num,PVEH_INFO pinfo)
    {
        //num是第几辆车
        //pinfo->wei怎么怎么处理
        //pinfo->axistype怎么怎么处理
      //pinfo->speed怎么怎么处理
    }
    怎么处理我可帮不了你了,我也不知道你回调的时候要做虾米。总体来说你需要做的就是定义一个回调函数并且传给DLL,就这么样。
      

  5.   

    首先你要声明一个回调函数并传给DLL,怎么传,那个已经做好的DLL应该有传回调的接口。
    ???????? 回调的接口怎么做
    还有我理解回调就相当于是一个中断程序,是吗?
    比如定时器中断,我只需要设置好定时器的间隔时间然后在定时器函数里面写程序,时间到了,操作系统自动就调用该段程序了,能这样理解吗?
      

  6.   

    是的,SetTimer最后一个参数就是回调函数,怎么设接口,我上面说的4点里面不是已经说了?