Callback without data

<< 点击显示目录 >>

主页  PVI通信 > PVI帮助信息 > PVI base system > PVICOM interface > User messages >

Callback without data

需要为 用户消息的消息句柄指定由应用程序提供的回调函数 的指针

SET_PVICALLBACK(二进制0xffffffff)必须被指定为消息编号。消息参数被传递到回调函数中。

类型为PVICALLBACK的回调函数的语法。

void WINAPI PviProc (WPARAM wParam, LPARAM lParam)

类型为PVICALLBACK的回调函数的参数。

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;
    }
}