首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

函数指针做参数有关问题

2013-01-04 
函数指针做参数问题本帖最后由 youhao1999 于 2012-12-24 10:32:15 编辑类中声明:void RegisterEveryNSamp

函数指针做参数问题
本帖最后由 youhao1999 于 2012-12-24 10:32:15 编辑


类中声明:
void RegisterEveryNSamplesEvent(void);
int32 CVICALLBACK EveryNCallback(TaskHandle taskHandle, int32 everyNsamplesEventType, uInt32 nSamples, void *callbackData);
类中实现:
#include "NIDAQmx.h"
void CDAQClass::RegisterEveryNSamplesEvent(void)
{
    if((error = DAQmxRegisterEveryNSamplesEvent(taskHandle,DAQmx_Val_Acquired_Into_Buffer,1000,0,EveryNCallback,NULL))<0)
    {
       ...
    }
}
int32 CVICALLBACK CDAQClass::EveryNCallback(TaskHandle taskHandle, int32 everyNsamplesEventType, uInt32 nSamples, void *callbackData)
{
    ...
}
//编译出错:
 //error C3867: “CDAQClass::EveryNCallback”: 函数调用缺少参数列表;请使//用“&CDAQClass::EveryNCallback”创建指向成员的指针

另在NIDAQmx.h中:
int32 __CFUNC  DAQmxRegisterEveryNSamplesEvent(TaskHandle task, int32 everyNsamplesEventType, uInt32 nSamples, uInt32 options,DAQmxEveryNSamplesEventCallbackPtr callbackFunction, void *callbackData);
typedef int32 (CVICALLBACK *DAQmxEveryNSamplesEventCallbackPtr)(TaskHandle taskHandle, int32 everyNsamplesEventType, uInt32 nSamples, void *callbackData);

[解决办法]
EveryNCallback必须是全局函数或静态成员函数
静态成员函数指针做参数就这样写: &CDAQClass::EveryNCallback
[解决办法]
回调函数在类中记得加static标记

因为指针函数是支持静态的。
[解决办法]
类成员函数有隐藏的this  你这个函数指针  要么就全局函数  要么就类静态成员函数才行

热点排行