www.pudn.com > vc5ͼÏñ²É¼¯ code.rar > dllentry.c


/*============================================================================== 
* 
*       filename        dllentry.c 
*       purpose         API for dynamic loading okapi32.dll (Ok series image cards) 
*       language        Microsoft Visual C 5.0 
*       author          S. Yang 
*       date            mon-date-99 
*----------------------- 
*       modify by       S. Yang 
*       purpose          
*       language        Microsoft Visual C 5.0  
*       date            99 
* 
*----------------------- 
* 
*		Copyright (C).  All Rights Reserved. 
* 
* 
*============================================================================== 
*       language include files 
*/ 
 
 
#include 
#include 
#include 
#include  
#include  
#include  
#include 
 
 
#include "okapi32.h" 
 
 
/*----------------------------------------------------------------------------- 
*       Functions Pointors 
*/ 
 
 
//1. section 
 
HANDLE	(WINAPI *lpfnOpenBoard)(long *); 
BOOL	(WINAPI *lpfnCloseBoard)(HANDLE); 
long	(WINAPI *lpfnGetLastError)(void); 
long	(WINAPI *lpfnGetBufferSize)(HANDLE hBoard, void **lpLinear, DWORD *dwSize); 
LPVOID 	(WINAPI *lpfnGetBufferAddr)(HANDLE hBoard, long iNoFrame); 
LPVOID  (WINAPI *lpfnGetTargetInfo)(HANDLE hBoard, TARGET tgt, long lNoFrame, short * wid, short * ht, long *stride); 
short	(WINAPI *lpfnGetTypeCode)(HANDLE hBoard,LPSTR lpBoardName); 
 
long	(WINAPI *lpfnSetTargetRect)(HANDLE hBoard, TARGET target, LPRECT lpTgtRect); 
BOOL	(WINAPI *lpfnSetToWndRect)(HANDLE hBoard, HWND hWnd); 
long	(WINAPI *lpfnSetVideoParam)(HANDLE hBoard, WORD wParam, long lParam); 
long	(WINAPI *lpfnSetCaptureParam)(HANDLE hBoard, WORD wParam, long lParam); 
BOOL	(WINAPI *lpfnSetSeqCallback)(HANDLE hBoard, 
								BOOL CALLBACK BeginProc(HANDLE hBoard),  
								BOOL CALLBACK SeqProc(HANDLE hBoard, long No),  
								BOOL CALLBACK EndProc(HANDLE hBoard)); 
BOOL	(WINAPI *lpfnCaptureTo)(HANDLE hBoard, TARGET Dest, long start, LPARAM lParam); 
BOOL	(WINAPI *lpfnCaptureSingle)(HANDLE hBoard, TARGET Dest, LONG lStart); 
BOOL	(WINAPI *lpfnCaptureActive)(HANDLE hBoard, TARGET Dest, LONG lStart); 
BOOL	(WINAPI *lpfnCaptureThread)(HANDLE hBoard, TARGET Dest, LONG lStart, LONG lNoFrame); 
BOOL	(WINAPI *lpfnCaptureSequence)(HANDLE hBoard, LONG lStart, LONG lNoFrame); 
 
BOOL	(WINAPI *lpfnCaptureToScreen)(HANDLE hBoard); 
BOOL	(WINAPI *lpfnPlaybackFrom)(HANDLE hBoard, TARGET src, long start, LPARAM lParam); 
BOOL	(WINAPI *lpfnPlaybackSequence)(HANDLE hBoard, LONG lStart, LONG lNoFrame); 
 
long	(WINAPI *lpfnGetCaptureStatus)(HANDLE hBoard, BOOL bWait); 
BOOL	(WINAPI *lpfnStopCapture)(HANDLE hBoard); 
 
long	(WINAPI *lpfnGetSeqCapture)(HANDLE hApi, long start, long count); 
 
BOOL	(WINAPI *lpfnCaptureByBuffer)(HANDLE hBoard, TARGET dest, long start, long num); 
BOOL	(WINAPI *lpfnCaptureByBufferEx)(HANDLE hBoard, long fileset, TARGET dest, long start, long num); 
BOOL	(WINAPI *lpfnPlaybackByBuffer)(HANDLE hBoard, TARGET src, long start, long num); 
 
 
long	(WINAPI *lpfnReadPixel)(HANDLE hBoard, TARGET src, long start, short x, short y); 
long	(WINAPI *lpfnWritePixel)(HANDLE hBoard, TARGET tgt, long start, short x, short y, long lValue); 
 
long	(WINAPI *lpfnSetConvertParam)(HANDLE hBoard, WORD wParam, long lParam); 
long	(WINAPI *lpfnReadRect)(HANDLE hBoard, TARGET src, long start, LPBYTE lpBuf); 
long	(WINAPI *lpfnWriteRect)(HANDLE hBoard, TARGET dst, long start, LPBYTE lpBuf); 
long	(WINAPI *lpfnTransferRect)(HANDLE hBoard, TARGET dest, long iFirst, TARGET src, long iStart, long lNum); 
long	(WINAPI *lpfnConvertRect)(HANDLE hBoard, TARGET dst, long first, TARGET src, long start, LPARAM no); 
long	(WINAPI *lpfnConvertRectEx)(HANDLE hDstBoard, TARGET dst, long first, HANDLE hSrcBoard,TARGET src, long start, LPARAM no); 
long	(WINAPI *lpfnReadRectEx)(HANDLE hBoard, TARGET src, long start, LPBYTE lpBuf, LPARAM lParam); 
long	(WINAPI *lpfnWriteRectEx)(HANDLE hBoard, TARGET dst, long start, LPBYTE lpBuf, LPARAM lParam); 
 
BOOL	(WINAPI *lpfnSetTextTo)(HANDLE hBoard, TARGET target, LPRECT lpRect, LOGFONT *lfLogFont, SETTEXTMODE *textMode, LPSTR lpString, long lLength);  
long	(WINAPI *lpfnDrawEllipsTo)(HANDLE hBoard, TARGET target, long lStart, LPRECT lpRect, long iForeColor); 
HDC		(WINAPI *lpfnCreateDCBitmap)(HANDLE hBoard, TARGET target, HANDLE *hDCBitmap); 
BOOL	(WINAPI *lpfnMapDCBitmapTo)(HANDLE hDCBitmap, long lStart); 
BOOL	(WINAPI *lpfnFreeDCBitmap)(HANDLE hDCBitmap); 
 
 
 
 
long	(WINAPI *lpfnGetSignalParam)(HANDLE hBoard, WPARAM wParam); 
long	(WINAPI *lpfnWaitSignalEvent)(HANDLE hBoard, WPARAM wParam, LPARAM lMilliSecond); 
long	(WINAPI *lpfnPutSignalParam)(HANDLE hBoard, WPARAM wParam, LPARAM lParam); 
 
BOOL	(WINAPI *lpfnSetSeqProcWnd)(HANDLE hBoard, HWND hwndMain); 
 
long	(WINAPI *lpfnEnableMask)(HANDLE hBoard, BOOL bMask); 
long	(WINAPI *lpfnSetMaskRect)(HANDLE hBoard, LPRECT lpRect, LPSTR lpMask); 
 
long	(WINAPI *lpfnFillOutLUT)(HANDLE hBoard,  LPBYTE bLUT, short offset, short num); 
 
short	(WINAPI *lpfnGetSlotBoard)(BOARDTYPE **lpOkInfo); 
short	(WINAPI *lpfnGetBoardIndex)(char *szBoardName, short iNo); 
short	(WINAPI *lpfnGetBoardName)(long lIndex, LPSTR szBoardName); 
 
long	(WINAPI *lpfnGetAvailBuffer)(void **lpLinear, DWORD *dwSize); 
long	(WINAPI *lpfnLockBuffer)(HANDLE hBoard, DWORD dwSizeByte, void **lpBasLinear); 
BOOL	(WINAPI *lpfnUnlockAllBuffer)(void); 
 
long	(WINAPI *lpfnApplyMemBlock)(DWORD dwBlockSize, DWORD dwBlockNo); 
long	(WINAPI *lpfnFreeMemBlock)(void); 
long	(WINAPI *lpfnGetMemBlock)(HANDLE hBoard, DWORD *dwEachSize,  DWORD *dwBlockNo); 
long	(WINAPI *lpfnLockMemBlock)(HANDLE hBoard, long dwBlockNo); 
long	(WINAPI *lpfnUnlockMemBlock)(void); 
 
 
 
BOOL	(WINAPI *lpfnMulCaptureTo)(HANDLE *lphBoard, TARGET Dest, long start, LPARAM lParam); 
BOOL	(WINAPI *lpfnMulCaptureByBuffer)(HANDLE *lphBoard, TARGET dest, long start, long num); 
 
BOOL	(WINAPI *lpfnSaveInitParam)(HANDLE hBoard, short iChannNo); 
BOOL	(WINAPI *lpfnLoadInitParam)(HANDLE hBoard, short iChannNo); 
 
long	(WINAPI *lpfnSetAllocBuffer)(long lSize); 
BOOL	(WINAPI *lpfnSetStaticVxD)(long lMode); 
BOOL	(WINAPI *lpfnSetNTDriver)(BOOL bCmd); 
BOOL	(WINAPI *lpfnSetLangResource)(BOOL bCmd); 
 
 
BOOL	(WINAPI *lpfnUnRegister)(DWORD dwCmd); 
long	(WINAPI *lpfnGetProgramInfo)(int iItem, LPSTR lpString, int iSize); 
 
long	(WINAPI *lpfnReadProtCode)(HANDLE hBoard, short iIndex); 
long	(WINAPI *lpfnWriteProtCode)(HANDLE hBoard, short iIndex, long lCode); 
 
long	(WINAPI *lpfnSaveImageFile)(HANDLE hBoard, LPSTR szFileName, long first, TARGET target, long start, long num); 
long	(WINAPI *lpfnLoadImageFile)(HANDLE hBoard, LPSTR szFileName, long first, TARGET target, long start, long num); 
 
long	(WINAPI *lpfnLoadConfigFile)(HANDLE hBoard, LPSTR szFileName); 
long	(WINAPI *lpfnSaveConfigFile)(HANDLE hBoard, LPSTR szFileName); 
 
  
BOOL	(WINAPI *lpfnOpenSetParamDlg)( HANDLE hBoard, HWND hParentWnd); 
BOOL	(WINAPI *lpfnOpenSeqCaptureDlg)( HANDLE hBoard, HWND hParentWnd); 
LPDIBINFO (WINAPI *lpfnOpenReplayDlg)( HANDLE hBoard, HWND hWnd, TARGET src, long total); 
HWND     (WINAPI *lpfnOpenReplayDlgEx)( HANDLE hBoard, HWND hWnd, TARGET src, long total, 
									LPBITMAPINFOHEADER lpbi, LPBYTE lpdib); 
 
 
HANDLE	(WINAPI *lpfnBeginEncode)(HANDLE hBoard, WORD wCodeWay, LPARAM lParam); 
long	(WINAPI *lpfnEncodeImage)(HANDLE hCoder, TARGET target, long start, LPBYTE lpData, long maxlen); 
long	(WINAPI *lpfnEndEncode)(HANDLE hCoder); 
 
 
HANDLE	(WINAPI *lpfnBeginDecode)(HANDLE hBoard, WORD wCodeWay, LPBYTE lpData, LPIMAGESIZE lpImageInfo); 
long	(WINAPI *lpfnDecodeImage)(HANDLE hCoder, LPBYTE lpData, long *length, TARGET target, long start); 
long	(WINAPI *lpfnEndDecode)(HANDLE hCoder); 
 
 
BOOL	(WINAPI *lpfnOutputByte)(WORD port, BYTE data); 
BYTE	(WINAPI *lpfnInputByte)(WORD port); 
BOOL	(WINAPI *lpfnOutputShort)(WORD port, short data); 
short	(WINAPI *lpfnInputShort)(WORD port); 
BOOL	(WINAPI *lpfnOutputLong)(WORD port, long data); 
long	(WINAPI *lpfnInputLong)(WORD port); 
 
BOOL	(WINAPI *lpfnSetPortBase)(WORD wPortBase, short iPortCount); 
short	(WINAPI *lpfnGetGPIOPort)(short index, WORD *wPortBase); 
 
 
DWORD	(WINAPI *lpfnGetAddrForVB)(void *); 
DWORD	(WINAPI *lpfnGetTickCount)(void ); 
void	(WINAPI *lpfnSleep)(DWORD); 
 
 
//------audio section 
HANDLE	(WINAPI *lpfnOpenAudio)(HANDLE hBoard, LPARAM lParam); 
BOOL	(WINAPI *lpfnCloseAudio)(HANDLE hAudio); 
long	(WINAPI *lpfnCaptureAudio)(HANDLE hAudio, TARGET target, FARPROC WriteAudioProc, LPARAM lParam); 
BOOL	(WINAPI *lpfnStopCaptureAudio)(HANDLE hAudio); 
 
long	(WINAPI *lpfnSetAudioParam)(HANDLE hAudio, WORD wParam, LPARAM lParam); 
long	(WINAPI *lpfnReadAudioData)(HANDLE hAudio, LPBYTE lpAudioBuf, long lSize); 
 
//------stream section 
HANDLE	(WINAPI *lpfnOpenStream)(HANDLE hBoard, LPARAM lParam); 
BOOL	(WINAPI *lpfnCloseStream)(HANDLE hStream); 
long	(WINAPI *lpfnCaptureStream)(HANDLE hStream, TARGET target, FARPROC lpfnUserProc, long lMiliSeconds); 
BOOL	(WINAPI *lpfnStopCaptureStream)(HANDLE hStream, DWORD dwPause); 
long	(WINAPI *lpfnSetStreamParam)(HANDLE hStream, WORD wParam, LPARAM lParam); 
long	(WINAPI *lpfnReadStreamData)(HANDLE hStream, LPBYTE lpStreamBuf, long lReadSize); 
 
 
/*----------------------------------------------------------------------------- 
*       Functions Process 
*/ 
 
 
//2. section 
 
static int		iLoadNum=0; 
static HANDLE	hDLLDrv; 
 
BOOL LoadOkApiDll() 
{ 
	if(!hDLLDrv) 
		hDLLDrv=LoadLibrary("OKAPI32.DLL"); 
 
	if(!hDLLDrv) //not found 
		return FALSE; 
 
	if(iLoadNum==0) { 
		(FARPROC )lpfnOpenBoard=GetProcAddress(hDLLDrv,"okOpenBoard"); 
		(FARPROC )lpfnCloseBoard=GetProcAddress(hDLLDrv,"okCloseBoard"); 
		(FARPROC )lpfnGetLastError=GetProcAddress(hDLLDrv,"okGetLastError"); 
		(FARPROC )lpfnGetBufferSize=GetProcAddress(hDLLDrv,"okGetBufferSize"); 
		(FARPROC )lpfnGetBufferAddr=GetProcAddress(hDLLDrv,"okGetBufferAddr"); 
		(FARPROC )lpfnGetTargetInfo=GetProcAddress(hDLLDrv,"okGetTargetInfo"); 
 
		(FARPROC )lpfnGetTypeCode=GetProcAddress(hDLLDrv,"okGetTypeCode"); 
 
		(FARPROC )lpfnSetTargetRect=GetProcAddress(hDLLDrv,"okSetTargetRect"); 
		(FARPROC )lpfnSetToWndRect=GetProcAddress(hDLLDrv,"okSetToWndRect"); 
		(FARPROC )lpfnSetVideoParam=GetProcAddress(hDLLDrv,"okSetVideoParam"); 
		(FARPROC )lpfnSetCaptureParam=GetProcAddress(hDLLDrv,"okSetCaptureParam"); 
 
		(FARPROC )lpfnCaptureTo=GetProcAddress(hDLLDrv,"okCaptureTo"); 
		(FARPROC )lpfnCaptureSingle=GetProcAddress(hDLLDrv,"okCaptureSingle"); 
		(FARPROC )lpfnCaptureActive=GetProcAddress(hDLLDrv,"okCaptureActive"); 
		(FARPROC )lpfnCaptureThread=GetProcAddress(hDLLDrv,"okCaptureThread"); 
		(FARPROC )lpfnCaptureSequence=GetProcAddress(hDLLDrv,"okCaptureSequence"); 
		(FARPROC )lpfnCaptureToScreen=GetProcAddress(hDLLDrv,"okCaptureToScreen"); 
		(FARPROC )lpfnPlaybackFrom=GetProcAddress(hDLLDrv,"okPlaybackFrom"); 
		(FARPROC )lpfnPlaybackSequence=GetProcAddress(hDLLDrv,"okPlaybackSequence"); 
 
		(FARPROC )lpfnGetCaptureStatus=GetProcAddress(hDLLDrv,"okGetCaptureStatus"); 
		(FARPROC )lpfnStopCapture=GetProcAddress(hDLLDrv,"okStopCapture"); 
 
		(FARPROC )lpfnGetSeqCapture=GetProcAddress(hDLLDrv,"okGetSeqCapture"); 
 
		(FARPROC )lpfnCaptureByBuffer=GetProcAddress(hDLLDrv,"okCaptureByBuffer"); 
		(FARPROC )lpfnCaptureByBufferEx=GetProcAddress(hDLLDrv,"okCaptureByBufferEx"); 
		(FARPROC )lpfnPlaybackByBuffer=GetProcAddress(hDLLDrv,"okPlaybackByBuffer"); 
 
		(FARPROC )lpfnReadPixel=GetProcAddress(hDLLDrv,"okReadPixel"); 
		(FARPROC )lpfnWritePixel=GetProcAddress(hDLLDrv,"okWritePixel"); 
		(FARPROC )lpfnSetConvertParam=GetProcAddress(hDLLDrv,"okSetConvertParam"); 
		(FARPROC )lpfnReadRect=GetProcAddress(hDLLDrv,"okReadRect"); 
		(FARPROC )lpfnWriteRect=GetProcAddress(hDLLDrv,"okWriteRect"); 
		(FARPROC )lpfnTransferRect=GetProcAddress(hDLLDrv,"okTransferRect"); 
		(FARPROC )lpfnConvertRect=GetProcAddress(hDLLDrv,"okConvertRect"); 
		(FARPROC )lpfnConvertRectEx=GetProcAddress(hDLLDrv,"okConvertRectEx"); 
		(FARPROC )lpfnReadRectEx=GetProcAddress(hDLLDrv,"okReadRectEx"); 
		(FARPROC )lpfnWriteRectEx=GetProcAddress(hDLLDrv,"okWriteRectEx"); 
 
		(FARPROC )lpfnSetTextTo=GetProcAddress(hDLLDrv,"okSetTextTo"); 
		(FARPROC )lpfnDrawEllipsTo=GetProcAddress(hDLLDrv,"okDrawEllipsTo"); 
 
		(FARPROC )lpfnCreateDCBitmap=GetProcAddress(hDLLDrv,"okCreateDCBitmap"); 
		(FARPROC )lpfnMapDCBitmapTo=GetProcAddress(hDLLDrv,"okMapDCBitmapTo"); 
		(FARPROC )lpfnFreeDCBitmap=GetProcAddress(hDLLDrv,"okFreeDCBitmap"); 
 
 
		(FARPROC )lpfnGetSignalParam=GetProcAddress(hDLLDrv,"okGetSignalParam"); 
		(FARPROC )lpfnWaitSignalEvent=GetProcAddress(hDLLDrv,"okWaitSignalEvent"); 
		(FARPROC )lpfnPutSignalParam=GetProcAddress(hDLLDrv,"okPutSignalParam"); 
 
		(FARPROC )lpfnSetSeqProcWnd=GetProcAddress(hDLLDrv,"okSetSeqProcWnd"); 
		(FARPROC )lpfnSetSeqCallback=GetProcAddress(hDLLDrv,"okSetSeqCallback"); 
 
		(FARPROC )lpfnEnableMask=GetProcAddress(hDLLDrv,"okEnableMask"); 
		(FARPROC )lpfnSetMaskRect=GetProcAddress(hDLLDrv,"okSetMaskRect"); 
		(FARPROC )lpfnFillOutLUT=GetProcAddress(hDLLDrv,"okFillOutLUT"); 
 
		(FARPROC )lpfnGetSlotBoard=GetProcAddress(hDLLDrv,"okGetSlotBoard"); 
		(FARPROC )lpfnGetBoardIndex=GetProcAddress(hDLLDrv,"okGetBoardIndex"); 
		(FARPROC )lpfnGetBoardIndex=GetProcAddress(hDLLDrv,"okGetBoardName"); 
 
		(FARPROC )lpfnGetAvailBuffer=GetProcAddress(hDLLDrv,"okGetAvailBuffer"); 
		(FARPROC )lpfnLockBuffer=GetProcAddress(hDLLDrv,"okLockBuffer"); 
		(FARPROC )lpfnUnlockAllBuffer=GetProcAddress(hDLLDrv,"okUnlockAllBuffer"); 
 
		(FARPROC )lpfnApplyMemBlock=GetProcAddress(hDLLDrv,"okApplyMemBlock"); 
		(FARPROC )lpfnFreeMemBlock=GetProcAddress(hDLLDrv,"okFreeMemBlock"); 
		(FARPROC )lpfnGetMemBlock=GetProcAddress(hDLLDrv,"okGetMemBlock"); 
		(FARPROC )lpfnLockMemBlock=GetProcAddress(hDLLDrv,"okLockMemBlock"); 
		(FARPROC )lpfnUnlockMemBlock=GetProcAddress(hDLLDrv,"UnlockMemBlock"); 
 
		(FARPROC )lpfnMulCaptureTo=GetProcAddress(hDLLDrv,"okMulCaptureTo"); 
		(FARPROC )lpfnMulCaptureByBuffer=GetProcAddress(hDLLDrv,"okMulCaptureByBuffer"); 
 
		(FARPROC )lpfnSaveInitParam=GetProcAddress(hDLLDrv,"okSaveInitParam"); 
		(FARPROC )lpfnLoadInitParam=GetProcAddress(hDLLDrv,"okLoadInitParam"); 
 
		(FARPROC )lpfnSetAllocBuffer=GetProcAddress(hDLLDrv,"okSetAllocBuffer"); 
		(FARPROC )lpfnSetStaticVxD=GetProcAddress(hDLLDrv,"okSetStaticVxD"); 
		(FARPROC )lpfnSetNTDriver=GetProcAddress(hDLLDrv,"okSetNTDriver"); 
		(FARPROC )lpfnSetNTDriver=GetProcAddress(hDLLDrv,"okSetLangResource"); 
 
 
		(FARPROC )lpfnUnRegister=GetProcAddress(hDLLDrv,"okUnRegister"); 
		(FARPROC )lpfnGetProgramInfo=GetProcAddress(hDLLDrv,"okGetProgramInfo"); 
 
		(FARPROC )lpfnReadProtCode=GetProcAddress(hDLLDrv,"okReadProtCode"); 
		(FARPROC )lpfnWriteProtCode=GetProcAddress(hDLLDrv,"okWriteProtCode"); 
 
		(FARPROC )lpfnSaveImageFile=GetProcAddress(hDLLDrv,"okSaveImageFile"); 
		(FARPROC )lpfnLoadImageFile=GetProcAddress(hDLLDrv,"okLoadImageFile"); 
 
		(FARPROC )lpfnLoadConfigFile=GetProcAddress(hDLLDrv,"okLoadConfigFile"); 
		(FARPROC )lpfnSaveConfigFile=GetProcAddress(hDLLDrv,"okSaveConfigFile"); 
 
		(FARPROC )lpfnOpenSetParamDlg=GetProcAddress(hDLLDrv,"okOpenSetParamDlg"); 
		(FARPROC )lpfnOpenSeqCaptureDlg=GetProcAddress(hDLLDrv,"okOpenSeqCaptureDlg"); 
		(FARPROC )lpfnOpenReplayDlg=GetProcAddress(hDLLDrv,"okOpenReplayDlg"); 
		(FARPROC )lpfnOpenReplayDlgEx=GetProcAddress(hDLLDrv,"okOpenReplayDlgEx"); 
 
		(FARPROC )lpfnBeginEncode=GetProcAddress(hDLLDrv,"okBeginEncode"); 
		(FARPROC )lpfnEncodeImage=GetProcAddress(hDLLDrv,"okEncodeImage"); 
		(FARPROC )lpfnEndEncode=GetProcAddress(hDLLDrv,"okEndEncode"); 
		(FARPROC )lpfnBeginDecode=GetProcAddress(hDLLDrv,"okBeginDecode"); 
		(FARPROC )lpfnDecodeImage=GetProcAddress(hDLLDrv,"okDecodeImage"); 
		(FARPROC )lpfnEndEncode=GetProcAddress(hDLLDrv,"okEndEncode"); 
 
 
		(FARPROC )lpfnOutputByte=GetProcAddress(hDLLDrv,"okOutputByte"); 
		(FARPROC )lpfnInputByte=GetProcAddress(hDLLDrv,"okInputByte"); 
		(FARPROC )lpfnOutputShort=GetProcAddress(hDLLDrv,"okOutputShort"); 
		(FARPROC )lpfnInputShort=GetProcAddress(hDLLDrv,"okInputShort"); 
		(FARPROC )lpfnOutputLong=GetProcAddress(hDLLDrv,"okOutputLong"); 
		(FARPROC )lpfnInputLong=GetProcAddress(hDLLDrv,"okInputLong"); 
 
		(FARPROC )lpfnSetPortBase=GetProcAddress(hDLLDrv,"okSetPortBase"); 
		(FARPROC )lpfnGetGPIOPort=GetProcAddress(hDLLDrv,"okGetGPIOPort"); 
 
		(FARPROC )lpfnGetAddrForVB=GetProcAddress(hDLLDrv,"okGetAddrForVB"); 
		(FARPROC )lpfnGetTickCount=GetProcAddress(hDLLDrv,"okGetTickCount"); 
		(FARPROC )lpfnSleep=GetProcAddress(hDLLDrv,"okSleep"); 
 
 
		//---audio 
		(FARPROC )lpfnOpenAudio=GetProcAddress(hDLLDrv,"okOpenAudio"); 
		(FARPROC )lpfnCloseAudio=GetProcAddress(hDLLDrv,"okCloseAudio"); 
		(FARPROC )lpfnCaptureAudio=GetProcAddress(hDLLDrv,"okCaptureAudio"); 
		(FARPROC )lpfnStopCaptureAudio=GetProcAddress(hDLLDrv,"okStopCaptureAudio"); 
		(FARPROC )lpfnSetAudioParam=GetProcAddress(hDLLDrv,"okSetAudioParam"); 
		(FARPROC )lpfnReadAudioData=GetProcAddress(hDLLDrv,"okReadAudioData"); 
 
        //---stream 
        (FARPROC )lpfnOpenStream = GetProcAddress(hDLLDrv, "okOpenStream"); 
        (FARPROC )lpfnCloseStream = GetProcAddress(hDLLDrv, "okCloseStream"); 
        (FARPROC )lpfnCaptureStream = GetProcAddress(hDLLDrv, "okCaptureStream"); 
        (FARPROC )lpfnStopCaptureStream = GetProcAddress(hDLLDrv, "okStopCaptureStream"); 
        (FARPROC )lpfnSetStreamParam = GetProcAddress(hDLLDrv, "okSetStreamParam"); 
        (FARPROC )lpfnReadStreamData = GetProcAddress(hDLLDrv, "okReadStreamData"); 
	} 
 
	iLoadNum++; 
 
	return TRUE; 
} 
 
FreeOkApiDll() 
{ 
	iLoadNum--; 
	if(iLoadNum<=0) { 
		FreeLibrary(hDLLDrv); 
		hDLLDrv=0; 
	} 
	return 1; 
} 
 
FARPROC GetProcPointer(LPSTR lpszName) 
{ 
	if(!hDLLDrv) 
		hDLLDrv=LoadLibrary("OKAPI32.DLL"); 
 
	return GetProcAddress(hDLLDrv,lpszName); 
} 
 
 
HANDLE	WINAPI okOpenBoard(long *iIndex)  
{ 
	LoadOkApiDll(); 
 
	return lpfnOpenBoard(iIndex); 
} 
 
 
 
BOOL	WINAPI okCloseBoard(HANDLE hBoard) 
{ 
	BOOL	ret=0; 
 
	if(hDLLDrv) 
		ret=lpfnCloseBoard(hBoard); 
	FreeOkApiDll(); 
 
	return ret; 
} 
 
 
//3. sections 
 
long	WINAPI okGetLastError(void ) 
{ 
	(FARPROC )lpfnGetLastError=GetProcPointer("okGetLastError"); 
	return lpfnGetLastError();	} 
 
long	WINAPI okGetBufferSize(HANDLE hBoard, void **lpLinear, DWORD *dwSize) 
{	 
	(FARPROC )lpfnGetBufferSize=GetProcPointer("okGetBufferSize"); 
	return lpfnGetBufferSize(hBoard, lpLinear, dwSize);	} 
 
 
LPVOID	WINAPI okGetBufferAddr(HANDLE hBoard, long iNoFrame) 
{	return lpfnGetBufferAddr(hBoard, iNoFrame);	} 
 
LPVOID	WINAPI okGetTargetInfo(HANDLE hBoard, TARGET tgt, long lNoFrame, short * wid, short * ht, long *stride) 
{	return lpfnGetTargetInfo(hBoard, tgt, lNoFrame, wid, ht, stride);	} 
 
short	WINAPI okGetTypeCode(HANDLE hBoard,LPSTR lpBoardName) 
{	return lpfnGetTypeCode(hBoard,lpBoardName);	} 
 
  
long	WINAPI okSetTargetRect(HANDLE hBoard, TARGET target, LPRECT lpTgtRect) 
{	return lpfnSetTargetRect(hBoard, target, lpTgtRect);	} 
 
BOOL	WINAPI okSetToWndRect(HANDLE hBoard, HWND hWnd) 
{	return lpfnSetToWndRect(hBoard, hWnd);	} 
 
BOOL	WINAPI okCaptureTo(HANDLE hBoard, TARGET Dest, long start, LPARAM lParam) 
{	return lpfnCaptureTo(hBoard, Dest, start, lParam);	} 
 
BOOL	WINAPI okCaptureSingle(HANDLE hBoard, TARGET Dest, LONG wParam) 
{	return lpfnCaptureSingle(hBoard, Dest, wParam);	} 
 
BOOL	WINAPI okCaptureActive(HANDLE hBoard, TARGET Dest, LONG wParam) 
{	return lpfnCaptureActive(hBoard, Dest, wParam);	} 
 
BOOL	WINAPI okCaptureThread(HANDLE hBoard, TARGET Dest, LONG wParam, LPARAM lParam) 
{	return lpfnCaptureThread(hBoard, Dest, wParam, lParam);	} 
 
BOOL	WINAPI okCaptureSequence(HANDLE hBoard, LONG wParam, LPARAM lParam) 
{	return lpfnCaptureSequence(hBoard, wParam, lParam);	} 
 
BOOL	WINAPI okCaptureToScreen(HANDLE hBoard) 
{	return lpfnCaptureToScreen(hBoard);	} 
 
BOOL	WINAPI okPlaybackFrom(HANDLE hBoard, TARGET src, long start, LPARAM lParam) 
{	return lpfnPlaybackFrom(hBoard, src, start, lParam);	} 
 
BOOL	WINAPI okPlaybackSequence(HANDLE hBoard, long start, LPARAM lParam) 
{	return lpfnPlaybackSequence(hBoard, start, lParam);	} 
 
long	WINAPI okGetCaptureStatus(HANDLE hBoard, BOOL bWait) 
{	return lpfnGetCaptureStatus(hBoard, bWait);	} 
 
BOOL	WINAPI okStopCapture(HANDLE hBoard) 
{	return lpfnStopCapture(hBoard);	} 
 
BOOL	WINAPI okCaptureByBuffer(HANDLE hBoard, TARGET dest, long start, long num) 
{	return lpfnCaptureByBuffer(hBoard, dest, start, num);	} 
 
long	WINAPI okGetSeqCapture(HANDLE hBoard, long start, long count) 
{	return lpfnGetSeqCapture(hBoard, start, count);	} 
 
 
BOOL	WINAPI okCaptureByBufferEx(HANDLE hBoard, long fileset, TARGET dest, long start, long num) 
{	return lpfnCaptureByBufferEx(hBoard, fileset, dest, start, num);	} 
 
BOOL	WINAPI okPlaybackByBuffer(HANDLE hBoard, TARGET src, long start, long num) 
{	return lpfnPlaybackByBuffer(hBoard, src, start, num);	} 
 
long	WINAPI okSetVideoParam(HANDLE hBoard, WORD wParam, long lParam) 
{	return lpfnSetVideoParam(hBoard, wParam, lParam);	} 
 
long	WINAPI okSetCaptureParam(HANDLE hBoard, WORD wParam, long lParam) 
{	return lpfnSetCaptureParam(hBoard, wParam, lParam);	} 
 
 
long	WINAPI okReadPixel(HANDLE  hBoard, TARGET src, long start, short x, short y) 
{	return lpfnReadPixel(hBoard, src, start, x, y);	} 
 
long	WINAPI okWritePixel(HANDLE  hBoard, TARGET src, long start, short x, short y, long value) 
{	return lpfnWritePixel(hBoard, src, start, x, y, value);	} 
 
long	WINAPI okSetConvertParam(HANDLE hBoard, WORD wParam, long lParam) 
{	return lpfnSetConvertParam(hBoard, wParam, lParam);	} 
 
long	WINAPI okReadRect(HANDLE  hBoard, TARGET src, long start, LPBYTE lpBuf) 
{	return lpfnReadRect(hBoard, src, start, lpBuf);	} 
 
long	WINAPI okWriteRect(HANDLE  hBoard, TARGET dst, long start, LPBYTE lpBuf) 
{	return lpfnWriteRect(hBoard, dst, start, lpBuf);	} 
 
long	WINAPI okTransferRect(HANDLE hBoard, TARGET dest, long iFirst, TARGET src, long iStart, long lNum) 
{	return lpfnTransferRect(hBoard, dest, iFirst, src, iStart, lNum);	} 
 
long	WINAPI okConvertRect(HANDLE hBoard, TARGET dst, long first, TARGET src, long start, LPARAM no) 
{	return lpfnConvertRect(hBoard, dst, first, src, start, no);	} 
 
long	WINAPI okConvertRectEx(HANDLE hDstBoard, TARGET dst, long first, HANDLE hSrcBoard, TARGET src, long start, LPARAM no) 
{	return lpfnConvertRectEx(hDstBoard, dst, first, hSrcBoard, src, start, no);	} 
 
long	WINAPI okReadRectEx(HANDLE hBoard, TARGET src, long start, LPBYTE lpBuf, LPARAM lParam) 
{	return lpfnReadRectEx(hBoard, src, start, lpBuf, lParam);	} 
 
long	WINAPI okWriteRectEx(HANDLE hBoard, TARGET dst, long start, LPBYTE lpBuf, LPARAM lParam) 
{	return lpfnWriteRectEx(hBoard, dst, start, lpBuf, lParam);	} 
 
 
BOOL	WINAPI okSetTextTo(HANDLE hBoard, TARGET target, LPRECT lpRect, LOGFONT *lfLogFont, SETTEXTMODE *textMode, LPSTR lpString, long lLength) 
{	return lpfnSetTextTo( hBoard, target, lpRect, lfLogFont, textMode, lpString, lLength);	} 
 
long	WINAPI okDrawEllipsTo(HANDLE hBoard, TARGET target, long lStart, LPRECT lpRect, long iForeColor) 
{	return lpfnDrawEllipsTo(hBoard, target, lStart, lpRect, iForeColor);	} 
 
 
HDC		WINAPI okCreateDCBitmap(HANDLE hBoard, TARGET target, HANDLE *hDCBitmap) 
{	return lpfnCreateDCBitmap(hBoard, target, hDCBitmap);	} 
 
BOOL	WINAPI okMapDCBitmapTo(HANDLE hDCBitmap, long lStart) 
{	return lpfnMapDCBitmapTo(hDCBitmap, lStart);	} 
 
BOOL	WINAPI okFreeDCBitmap(HANDLE hDCBitmap) 
{	return lpfnFreeDCBitmap(hDCBitmap);	} 
 
 
 
long	WINAPI okGetSignalParam(HANDLE hBoard, WPARAM wParam) 
{	return lpfnGetSignalParam(hBoard, wParam);	} 
 
long	WINAPI okWaitSignalEvent(HANDLE hBoard, WPARAM wParam, LPARAM lMilliSecond) 
{	return lpfnWaitSignalEvent(hBoard, wParam, lMilliSecond);	} 
 
long	WINAPI okPutSignalParam(HANDLE hBoard, WPARAM wParam, LPARAM lParam) 
{	return lpfnPutSignalParam(hBoard, wParam, lParam);	} 
 
BOOL	WINAPI okSetSeqProcWnd(HANDLE hBoard, HWND hwndMain) 
{	return lpfnSetSeqProcWnd(hBoard, hwndMain);	} 
 
 
BOOL	WINAPI okSetSeqCallback(HANDLE hBoard,  
								BOOL CALLBACK BeginProc(HANDLE hBoard),  
								BOOL CALLBACK SeqProc(HANDLE hBoard, long No),  
								BOOL CALLBACK EndProc(HANDLE hBoard)) 
{ 
	return lpfnSetSeqCallback(hBoard, BeginProc, SeqProc, EndProc);	 
} 
 
 
long	WINAPI okEnableMask(HANDLE hBoard, BOOL bMask) 
{	return lpfnEnableMask(hBoard, bMask);	} 
 
long	WINAPI okSetMaskRect(HANDLE hBoard, LPRECT lpRect, LPBYTE lpMask) 
{	return lpfnSetMaskRect(hBoard, lpRect, lpMask);	} 
 
 
long	WINAPI okFillOutLUT(HANDLE hBoard,  LPBYTE bLUT, short start, short num) 
{	return lpfnFillOutLUT(hBoard,  bLUT, start, num);	} 
 
 
short	WINAPI okGetSlotBoard(BOARDTYPE **lpOkInfo) 
{ 
	(FARPROC )lpfnGetSlotBoard=GetProcPointer("okGetSlotBoard"); 
	return lpfnGetSlotBoard(lpOkInfo);	} 
 
short	WINAPI okGetBoardIndex(char *szBoardName, short iNo) 
{ 
	(FARPROC )lpfnGetBoardIndex=GetProcPointer("okGetBoardIndex"); 
	return lpfnGetBoardIndex(szBoardName, iNo);	} 
 
 
short	WINAPI okGetBoardName(long lIndex, LPSTR szBoardName) 
{ 
	(FARPROC )lpfnGetBoardName=GetProcPointer("okGetBoardName"); 
	return lpfnGetBoardName(lIndex, szBoardName);	} 
 
 
long	WINAPI okGetAvailBuffer(void **lpLinear, DWORD *dwSize) 
{ 
	(FARPROC )lpfnGetAvailBuffer=GetProcPointer("okGetAvailBuffer"); 
	return lpfnGetAvailBuffer(lpLinear, dwSize);	} 
 
long	WINAPI okLockBuffer(HANDLE hBoard, DWORD dwSizeByte, void **lpBasLinear) 
{	return lpfnLockBuffer(hBoard, dwSizeByte, lpBasLinear);	} 
 
BOOL	WINAPI okUnlockAllBuffer(void) 
{	return lpfnUnlockAllBuffer();	} 
 
 
long	WINAPI okApplyMemBlock(DWORD dwBlockSize, DWORD dwBlockNo) 
{	(FARPROC )lpfnApplyMemBlock=GetProcPointer("okApplyMemBlock"); 
	return lpfnApplyMemBlock(dwBlockSize, dwBlockNo);	} 
 
BOOL	WINAPI okFreeMemBlock(void) 
{	return lpfnFreeMemBlock();	} 
 
long	WINAPI okGetMemBlock(HANDLE hBoard, DWORD *dwEachSize,  DWORD *dwBlockNo) 
{	return lpfnGetMemBlock(hBoard, dwEachSize,  dwBlockNo);	} 
 
long	WINAPI okLockMemBlock(HANDLE hBoard, long lBlockNo) 
{	return lpfnLockMemBlock(hBoard, lBlockNo);	} 
 
BOOL	WINAPI okUnlockMemBlock(void) 
{	return lpfnUnlockMemBlock();	} 
 
 
 
BOOL	WINAPI okMulCaptureTo(HANDLE *lphBoard, TARGET Dest, long start, LPARAM lParam) 
{	return lpfnMulCaptureTo(lphBoard, Dest, start, lParam);	} 
 
BOOL	WINAPI okMulCaptureByBuffer(HANDLE *lphBoard, TARGET Dest, long start, LPARAM lParam) 
{	return lpfnCaptureByBuffer(lphBoard, Dest, start, lParam);	} 
 
 
long	WINAPI okSetAllocBuffer(long lSize) 
{ 
	(FARPROC )lpfnSetAllocBuffer=GetProcPointer("okSetAllocBuffer"); 
	return lpfnSetAllocBuffer(lSize);	 
} 
 
BOOL	WINAPI okSetStaticVxD(long lMode) 
{ 
	(FARPROC )lpfnSetStaticVxD=GetProcPointer("okSetStaticVxD"); 
	return lpfnSetStaticVxD(lMode); 
} 
 
BOOL	WINAPI okSetNTDriver(BOOL lMode) 
{ 
	(FARPROC )lpfnSetNTDriver=GetProcPointer("okSetNTDriver"); 
	return lpfnSetNTDriver(lMode);	 
} 
 
long	WINAPI okSetLangResource(long lMode) 
{ 
	(FARPROC )lpfnSetLangResource=GetProcPointer("okSetLangResource"); 
	return lpfnSetLangResource(lMode);	 
} 
 
 
BOOL	WINAPI okUnRegister(DWORD dwCmd) 
{	 
	(FARPROC )lpfnUnRegister=GetProcPointer("okUnRegister"); 
	return lpfnUnRegister(dwCmd);	 
} 
 
long	WINAPI okGetProgramInfo(int iItem, LPSTR lpString, int iSize) 
{	 
	(FARPROC )lpfnGetProgramInfo=GetProcPointer("okGetProgramInfo"); 
	return lpfnGetProgramInfo(iItem, lpString, iSize); 
} 
 
 
BOOL	WINAPI okSaveInitParam(HANDLE hBoard, short iChanNo) 
{	return lpfnSaveInitParam(hBoard, iChanNo);	} 
 
BOOL	WINAPI okLoadInitParam(HANDLE hBoard, short iChanNo) 
{	return lpfnLoadInitParam(hBoard, iChanNo);	} 
 
long	WINAPI okReadProtCode(HANDLE hApi, short iIndex) 
{	return lpfnReadProtCode(hApi, iIndex);	} 
 
long	WINAPI okWriteProtCode(HANDLE hApi, short iIndex, long lCode) 
{	return lpfnWriteProtCode(hApi, iIndex, lCode);	} 
 
 
 
long WINAPI okSaveImageFile(HANDLE hBoard, LPSTR szFileName, long first, TARGET target, long start, long num) 
{	return lpfnSaveImageFile(hBoard, szFileName, first, target, start, num);	} 
 
long WINAPI okLoadImageFile(HANDLE hBoard, LPSTR szFileName, long first, TARGET target, long start, long num) 
{	return lpfnLoadImageFile(hBoard, szFileName, first, target, start, num);	} 
 
BOOL WINAPI okLoadConfigFile(HANDLE hBoard, LPSTR szFileName) 
{	return lpfnLoadConfigFile(hBoard, szFileName);	} 
 
BOOL WINAPI okSaveConfigFile(HANDLE hBoard, LPSTR szFileName) 
{	return lpfnSaveConfigFile(hBoard, szFileName);	} 
 
 
BOOL WINAPI okOpenSetParamDlg( HANDLE hBoard, HWND hParentWnd) 
{	return lpfnOpenSetParamDlg(hBoard, hParentWnd);	} 
 
BOOL WINAPI okOpenSeqCaptureDlg( HANDLE hBoard, HWND hParentWnd) 
{	return lpfnOpenSeqCaptureDlg(hBoard, hParentWnd);	} 
 
LPDIBINFO WINAPI okOpenReplayDlg( HANDLE hBoard, HWND hWnd, TARGET src, long total) 
{	return lpfnOpenReplayDlg(hBoard, hWnd, src, total);	} 
 
HWND WINAPI okOpenReplayDlgEx( HANDLE hBoard, HWND hWnd, TARGET src, long total, LPBITMAPINFOHEADER lpbi, LPBYTE lpdib) 
{	return lpfnOpenReplayDlgEx(hBoard, hWnd, src, total, lpbi, lpdib);	} 
 
 
HANDLE WINAPI okBeginEncode(HANDLE hBoard, WORD wCodeWay, LPARAM lParam) 
{	return lpfnBeginEncode(hBoard, wCodeWay, lParam);	} 
 
long WINAPI okEncodeImage(HANDLE hCoder, TARGET target, long start, LPBYTE lpData, long maxlen) 
{	return lpfnEncodeImage(hCoder, target, start, lpData, maxlen);	} 
 
long WINAPI okEndEncode(HANDLE hCoder) 
{	return lpfnEndEncode(hCoder);	} 
 
 
HANDLE WINAPI okBeginDecode(HANDLE hBoard, WORD wCodeWay, LPBYTE lpData, LPIMAGESIZE lpImageInfo) 
{	return lpfnBeginDecode(hBoard, wCodeWay, lpData, lpImageInfo);	} 
 
long WINAPI okDecodeImage(HANDLE hCoder, LPBYTE lpData, long *length, TARGET target, long start) 
{	return lpfnDecodeImage(hCoder, lpData, length, target, start);	} 
 
long WINAPI okEndDecode(HANDLE hCoder) 
{	return lpfnEndDecode(hCoder);	} 
 
 
 
BOOL	WINAPI okOutputByte(WORD port, BYTE data) 
{	return lpfnOutputByte(port, data);	} 
 
BYTE	WINAPI okInputByte(WORD port) 
{	return lpfnInputByte(port);	} 
 
BOOL	WINAPI okOutputShort(WORD port, short data) 
{	return lpfnOutputShort(port, data);	} 
 
short	WINAPI okInputShort(WORD port) 
{	return lpfnInputShort(port);	} 
 
BOOL	WINAPI okOutputLong(WORD port, long data) 
{	return lpfnOutputLong(port, data);	} 
 
long	WINAPI okInputLong(WORD port) 
{	return lpfnInputLong(port);	} 
 
 
BOOL	WINAPI okSetPortBase(WORD wPortBase, short iPortCount) 
{	return lpfnSetPortBase(wPortBase, iPortCount);	} 
 
short	WINAPI okGetGPIOPort(short index, WORD *wPortBase) 
{	return lpfnGetGPIOPort(index, wPortBase);	} 
		 
 
 
DWORD	WINAPI okGetAddrForVB(void *lpArry) 
{	return lpfnGetAddrForVB(lpArry);	} 
 
DWORD	WINAPI okGetTickCount(void) 
{	return lpfnGetTickCount();	} 
 
void	WINAPI okSleep(DWORD dwMillSeconds) 
{	lpfnSleep(dwMillSeconds);	} 
 
 
 
//--------audio----------- 
 
HANDLE	WINAPI okOpenAudio(HANDLE hBoard, LPARAM lParam) 
{ 
	LoadOkApiDll(); 
	return lpfnOpenAudio(hBoard, lParam); 
} 
 
BOOL	WINAPI okCloseAudio(HANDLE hAudio) 
{ 
	BOOL	ret; 
 
	ret=lpfnCloseAudio(hAudio); 
	FreeOkApiDll(); 
 
	return ret; 
} 
 
 
long	WINAPI okCaptureAudio(HANDLE hAudio, TARGET target, FARPROC WriteAudioProc, LPARAM lParam) 
{	return lpfnCaptureAudio(hAudio, target, WriteAudioProc, lParam);	} 
 
BOOL	WINAPI okStopCaptureAudio(HANDLE hAudio) 
{	return lpfnStopCaptureAudio(hAudio);	} 
 
long	WINAPI okSetAudioParam(HANDLE hAudio, WORD wParam, LPARAM lParam) 
{	return lpfnSetAudioParam(hAudio, wParam, lParam);	} 
 
long	WINAPI okReadAudioData(HANDLE hAudio, LPBYTE lpAudioBuf, long lSize) 
{	return lpfnReadAudioData(hAudio, lpAudioBuf, lSize);	} 
 
 
//----------- stream -------------- 
HANDLE	WINAPI okOpenStream(HANDLE hBoard, LPARAM lParam) 
{ 
    return lpfnOpenStream(hBoard, lParam); 
} 
 
BOOL	WINAPI okCloseStream(HANDLE hStream) 
{ 
    return lpfnCloseStream(hStream); 
} 
 
long	WINAPI okCaptureStream(HANDLE hStream, TARGET target, FARPROC lpfnUserProc, long lMiliSeconds) 
{ 
    return lpfnCaptureStream(hStream, target, lpfnUserProc, lMiliSeconds); 
} 
 
BOOL	WINAPI okStopCaptureStream(HANDLE hStream, DWORD dwPause) 
{ 
    return lpfnStopCaptureStream(hStream, dwPause); 
} 
 
long	WINAPI okSetStreamParam(HANDLE hStream, WORD wParam, LPARAM lParam) 
{ 
    return lpfnSetStreamParam(hStream, wParam, lParam); 
} 
 
long	WINAPI okReadStreamData(HANDLE hStream, LPBYTE lpStreamBuf, long lReadSize) 
{ 
    return lpfnReadStreamData(hStream, lpStreamBuf, lReadSize); 
} 
 
//-----------end------------------------------------------------------------------------