NI LabVIEW,CVI,数据采集等产品讨论区

取消
显示结果 
搜索替代 
您的意思是: 

请问如何根据DLL实现回调函数调用呢。参考.H文件

typedef void (*DeviceDataHandleFunc)(LPCSTR lpsDeviceId, LPCSTR lpsParentId, teDeviceType eDeviceType, LPCSTR lpsStatus);
typedef void (*RS232DataHandleFunc)(LPCSTR lpsDeviceId, BYTE* pData, UINT8 u8Len);


VERSAZIGBEEAPIWIN_API void InitAPI();
VERSAZIGBEEAPIWIN_API void FreeAPI();
VERSAZIGBEEAPIWIN_API void RegisterDeviceDataHandler(DeviceDataHandleFunc Func);
VERSAZIGBEEAPIWIN_API void RegisterRS232DataHandler(RS232DataHandleFunc Func);

在用DLL生成VI时,怎么弄呢。哪位大侠给点范例。

0 项奖励
1 条消息(共 6 条)
5,896 次查看
用dll生成VI,还是在VI中调用dll,说的详细点。
0 项奖励
2 条消息(共 6 条)
5,898 次查看
VERSAZIGBEEAPIWIN_API void RegisterDeviceDataHandler(DeviceDataHandleFunc Func);
DLL中生成VI,比如上面这个函数的参数是函数指针,直接在里面注册下面这个回调函数。
typedef void (*DeviceDataHandleFunc)(LPCSTR lpsDeviceId, LPCSTR lpsParentId, teDeviceType eDeviceType, LPCSTR lpsStatus);
附件是我的.H文件和DLL文件。
0 项奖励
3 条消息(共 6 条)
5,891 次查看

typedef void (*DeviceDataHandleFunc)(LPCSTR lpsDeviceId, LPCSTR lpsParentId, teDeviceType eDeviceType, LPCSTR lpsStatus);
typedef void (*RS232DataHandleFunc)(LPCSTR lpsDeviceId, BYTE* pData, UINT8 u8Len);

VERSAZIGBEEAPIWIN_API void InitAPI();
VERSAZIGBEEAPIWIN_API void FreeAPI();
VERSAZIGBEEAPIWIN_API void EnableLog(BOOL bEnable);
VERSAZIGBEEAPIWIN_API void RegisterDeviceDataHandler(DeviceDataHandleFunc Func);
VERSAZIGBEEAPIWIN_API void RegisterRS232DataHandler(RS232DataHandleFunc Func);
VERSAZIGBEEAPIWIN_API BOOL OpenCom(LPCSTR lpsCom, DWORD dwBaudRate);
VERSAZIGBEEAPIWIN_API void CloseCom();
VERSAZIGBEEAPIWIN_API void SetTxPower(LPCSTR lpsDeviceId, teTxPowerLevel eTxPowerLevel);
VERSAZIGBEEAPIWIN_API void SetParentID(LPCSTR lpsDeviceId, LPCSTR lpsParentId);
VERSAZIGBEEAPIWIN_API void SetSleepTime(LPCSTR lpsDeviceId, DWORD dwSeconds);
VERSAZIGBEEAPIWIN_API BSTR ScanAndGetCoordinatorMacId();
VERSAZIGBEEAPIWIN_API void SetWorkTime(LPCSTR lpsDeviceId, DWORD dwWorkTime);
VERSAZIGBEEAPIWIN_API void SetRS232Data(LPCSTR lpsDeviceId, BYTE* pData, UINT nSize);
VERSAZIGBEEAPIWIN_API void SetUartBaudRate(LPCSTR lpsDeviceId, teUartBaudRate eUartBaudRate);
这些都是我DLL里面的函数原型,在用DLL构造子函数VI时,我遇到以下问题 :
 
 DLL中的RegisterDeviceDataHandler(DeviceDataHandleFunc Func);函数中的函数指针应该怎样定义在VI参数原型里面呢,这个函数的功能是注册一个回调函数,然后在底层有数据上来的时候自动调用 这个函数 ,比如我定义一个 RegisterDeviceDataHandler(DeviceDataHandleFunc Func1);函数 ,然后就会在底层自动调用Func1(*RS232DataHandleFunc)(LPCSTR lpsDeviceId, BYTE* pData, UINT8 u8Len);这个函数。如上功能有没有很好的实现方法呢 。
 
0 项奖励
4 条消息(共 6 条)
5,881 次查看
如果你的dll是标准的,LabVIEW会通过.h文件自动识别函数名及参数,但是你的比较怪异,不过你可以手动修改你的函数名、参数名和参数类型,前提是你需要知道函数原型,
祝你好运吧!
0 项奖励
5 条消息(共 6 条)
5,876 次查看
现在我也遇到这个同样类似的问题,但我比较幸运,我的这个设备商除了提供了这种DLL外还提供了相同功能的ActiveX.ocx控件,这样在ActiveX.ocx控件里就可以用到Register Event CallBack函数模块了!大家可以参考LABVIEW8.5里相关便当!
0 项奖励
6 条消息(共 6 条)
4,576 次查看