int scan(FILE *fp,  int (*ontoken)(char *, int, void *), void *userdata) {
    ontoken(s ,20 , userdata) ;
}int   scan_proc(char *s, int len, void *udata)
{        
         int *p = udata ;
         fwrite(s, 1, len, stdout) ;
         fputc('\n', stdout);
         
         *(int *)udata = 33  ;
         return 0;
}void test()
{
   int data ;
  scan(fp,scan_proc, &data)
 
   // data就是需要传出的用户数据
}

解决方案 »

  1.   

    如果 你这个 callback 函数要作为一个函数 指针传送给一个 dll,那么传送的参数就应给是你程序中开辟的一段内存。
    例如:
    在一个dll 中 导出一个函数
    定义
    typedef void CALLBACK (*LPFun)(LPVOID lpData);
    导出函数
    // lpFun ---用户的回调函数, lpUserData - 回调函数的参数.
    void TestFun(LPFun lpFun,LPVOID lpUserData);在你的程序调用这个dll 中的这个导出函数的时候,你应该把这个函数的指针,
    和 一块内存传给 TestFun