函数指针做参数问题
本帖最后由 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 你这个函数指针 要么就全局函数 要么就类静态成员函数才行