<< 点击显示目录 >> 主页 PVI通信 > PVI帮助信息 > PVI base system > PVICOM interface > User messages > Callback without data |
需要为 用户消息的消息句柄指定由应用程序提供的回调函数 的指针。
SET_PVICALLBACK(二进制0xffffffff)必须被指定为消息编号。消息参数被传递到回调函数中。
void WINAPI PviProc (WPARAM wParam, LPARAM lParam)
Argument |
说明 |
wParam |
对响应或事件数据的引用(用于PVI响应功能)。 |
lParam |
消息参数 在32位PVI版本(PviCom.dll)中,消息参数(用户参数)的大小为4字节,在64位PVI版本(PviCom64.dll)中为8字节。 |
与作为回调函数的用户消息适用相同的规则 ,但响应或事件数据必须用PVICOM函数读取,就像 作为窗口消息的 用户消息一样。
Example for Visual C++
#include <PviCom.h>
#define PV_CNT 40
DWORD PvLinkID[PV_CNT];
long PvData[PV_CNT];
long PvDataError[PV_CNT];
long PvWriteError[PV_CNT];
HANDLE hRespEvent;
static void WINAPI PviCallback (WPARAM wParam, LPARAM lParam)
{
T_RESPONSE_INFO Info;
long ErrCode;
long Data;
DWORD LinkID;
// get response informations:
ErrCode = PviGetResponseInfo (wParam, NULL, NULL, &Info, sizeof(Info));
if (ErrCode != 0)
return; // -> no response (skip error 12055)
switch (Info.nMode)
{
case POBJ_MODE_LINK:
// get link response:
ErrCode = PviLinkResponse (wParam, &LinkID);
if ((DWORD) lParam < PV_CNT)
{
PvDataError[lParam] = ErrCode;
if (ErrCode == 0)
PvLinkID[lParam] = LinkID;
}
break;
case POBJ_MODE_UNLINK:
// get unlink response:
ErrCode = PviUnlinkResponse (wParam);
if ((DWORD) lParam < PV_CNT)
PvLinkID[lParam] = 0;
break;
case POBJ_MODE_EVENT:
case POBJ_MODE_READ:
// get read or event response (PV data):
ErrCode = PviReadResponse (wParam, &Data, sizeof (Data));
if ((DWORD) lParam < PV_CNT)
{
PvData[lParam] = Data;
PvDataError[lParam] = ErrCode;
SetEvent (hRespEvent);
}
break;
case POBJ_MODE_WRITE:
// get write response (PV data):
ErrCode = PviWriteResponse (wParam);
if ((DWORD) lParam < PV_CNT)
{
PvWriteError[lParam] = ErrCode;
SetEvent (hRespEvent);
}
break;
}
}