函数定义:ST_RET sx_parseExx_mt (ST_CHAR *fileName, ST_INT numItems, 
SX_ELEMENT *itemTbl, ST_VOID *usr,
                   ST_RET (*u_sx_el_start_fun) (SX_DEC_CTRL *sxDecCtrl, ST_CHAR *tag),
                   ST_RET (*u_sx_el_end_fun) (SX_DEC_CTRL *sxDecCtrl, ST_CHAR *tag));调用该函数: rc = sx_parseExx_mt (logFileName, 0, NULL, &logCfgxCtrl, _logcfg_data_start, _logcfg_data_end);编译错误:error C2664: 'sx_parseExx_mt' : cannot convert parameter 5 from 'int (struct sx_dec_ctrl *,char *)' to 'int (__cdecl *)(struct sx_dec_ctrl *,char *)'请指教如何才能消除错误?

解决方案 »

  1.   

    应该是_logcfg_data_start这个函数的调用约定问题。你是不是定义成_stdcall 调用。
      

  2.   

    _logcfg_data_start这个函数的原型是不是有WINAPI、CALLBACK之类的修饰?比如:
    ST_RET WINAPI _logcfg_data_start(SX_DEC_CTRL *sxDecCtrl, ST_CHAR *tag)
    如果有的话,需要去掉。
      

  3.   

    ST_RET __cdecl _logcfg_data_start(SX_DEC_CTRL *sxDecCtrl, ST_CHAR *tag)
      

  4.   

    要解决 C2664,
    1.再次检查给定函数的原型,并改正错误信息中指出的参数。
    2.如果需要的话,提供显式转换。
    http://msdn.microsoft.com/zh-cn/library/s5b150wd.aspx
      

  5.   

    类的成员函数隐含了this指针,传递给成员函数的函数指针必须是个真指针,否则就报类型不匹配的错误。我写过一个,必须在类声明之前声明一个全局的函数指针,然后把指定的函数名地址传给这个指针,再把这个指针作为参数传给目标函数就不报错了。为什么会这样我就不清楚了,我也觉得很奇怪