多缓冲区方式注册缓冲区满的消息RegisterNotify()

VC/C++Builder下定义原型:
int __stdcall RegisterNotify(UINT NotifyNo, HANDLE hWnd,UINT uMsg,\
UINT wParam, LONG lParam);
VC/C++Builder下使用示例:
RegisterNotify(0,hWnd, WM_KEYDOWN,48,0);

VB下定义方式:
Declare Function DllRegisterNotify Lib "ADCard.Dll" Alias "_RegisterNotify@20" (ByVal NotifyNo As Long, ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

VB下使用示例:
i = DllRegisterNotify(0, C_Notify.hWnd, WM_KEYDOWN, 48, 0)

Delphi下定义方式
function RegisterNotify(NotifyNo:Longword; hWnd:HWND;
uMsg:Longword;
wParam:longword; lParam:longint):Longword;
stdcall; external 'adcard.dll' name '_RegisterNotify@20';

Delphi下使用示例
i := RegisterNotify(0,Button3.Handle,WM_KEYUP,48,0);

功能及参数说明:

此函数设置或取消提示(Notify)消息,即AD板驱动程序在多缓冲区方式下每缓冲区块装满采集结果时,将向用户程序(实际为句柄hWnd代表的子窗口(可以是按钮等控件))发送消息(uMsg,wParam,lParam);可注册0至3号多个消息(NotifyNo=0~3),即每个缓冲区块满时同时发送这些所有的消息,但通常使用1个消息就足够;若hWnd=0或uMsg=0将屏蔽此消息。在上面的示例中,说明要求AD驱动程序在每个缓冲区满时,向用户程序的按钮子窗口发送一个按下'A'键的消息。此后,用户在此子窗口的相应消息响应函数中,调用ADResult()取一块采集结果即可。

此函数通常在StartIntr前调用,使通知消息有效。

特别注意:在这种多缓冲区、消息驱动取采集结果的工作模式下,如果采集速度比较高,且用户程序在此消息响应函数中处理采集结果时,或在其它消息响应函数中进行其它操作时,花了太多的时间,就可能来不及取采集结果,从而使驱动程序中所有缓冲区都满,并且向用户程序发送的消息淤积,丢失信息,从而使消息链断链,表现为应用程序从此以后再也得不到缓冲区满的消息。针对情况,用户程序应在代表缓冲区满的消息响应函数中,取一块采集结果后,用QueryBuf()判断,是否还有存放满采集结果的缓冲区块存在,若存在,可在此消息响应函数中直接再多取1或多块采集结果缓冲区,从而防止消息淤积或消息断链的情况。