/** *************************************************************** ** ** Radiography Detector: application interface ** ** (c) VATech & E-Woo by S.B. ** ** *************************************************************** **/ #include "stdafx.h" #include "windows.h" #include "tchar.h" #include "VADAVIntf.h" #pragma comment(lib, "version.lib") #define NOT_AVAILABLE (int)-1 static void iErrorMsg(const TCHAR* AMsg, int AErrCode) { TCHAR qMsg[256], qErrDescr[180]; _tcscpy(qMsg, AMsg); if (AErrCode) { _tcscat(qMsg, _T("\n")); if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, AErrCode, 0, qErrDescr, sizeof(qErrDescr) - 1, NULL) <= 0) _stprintf(qErrDescr, _T("Error code #%d (%Xh)"), AErrCode, AErrCode); else _stprintf(qErrDescr + _tcslen(qErrDescr), _T(" #%d"), AErrCode); _tcscat(qMsg, qErrDescr); }; // if AErrCode MessageBox(NULL, qMsg, _T("X-ray detector library's load error"), MB_OK | MB_ICONSTOP); } static BOOL iGetPA(HINSTANCE AHDll, const TCHAR* AFuncName, FARPROC* AFuncRef) { #ifdef UNICODE char qFuncName[80]; WideCharToMultiByte(CP_ACP, 0, AFuncName, -1, qFuncName, 79, NULL, NULL); *AFuncRef = GetProcAddress(AHDll, qFuncName); #else * AFuncRef = GetProcAddress(AHDll, AFuncName); #endif if (*AFuncRef) return TRUE; TCHAR qErrMsg[256]; _tcscpy(qErrMsg, _T("Can't find exported procedure \"")); _tcscat(qErrMsg, AFuncName); _tcscat(qErrMsg, _T("\"")); iErrorMsg(qErrMsg, 0); return FALSE; } static void iDllNameDefault(TCHAR* ADllFName) { _tcscpy(ADllFName, _T("VADAV_FGM.dll")); #ifdef _WIN64 _tcscpy(_tcsrchr(ADllFName, _T('.')), _T("_64.dll")); #endif } BOOL iDllVersionCheck(int ApiVerMajor, int ApiVerMinor, int ApiVerPatch, int ApiVerBuild, int DllVerMajor, int DllVerMinor, int DllVerPatch, int DllVerBuild) { BOOL qOK = TRUE; for (int i = 0; i < 4; i++) { switch (i) { case 0: // Version major if (ApiVerMajor == NOT_AVAILABLE) continue; else if (ApiVerMajor < DllVerMajor) return TRUE; else if (ApiVerMajor > DllVerMajor) return FALSE; else continue; break; case 1: // Version minor if (ApiVerMinor == NOT_AVAILABLE) continue; else if (ApiVerMinor < DllVerMinor) return TRUE; else if (ApiVerMinor > DllVerMinor) return FALSE; else continue; break; case 2: // Version patch if (ApiVerPatch == NOT_AVAILABLE) continue; else if (ApiVerPatch < DllVerPatch) return TRUE; else if (ApiVerPatch > DllVerPatch) return FALSE; else continue; break; case 3: // Version build if (ApiVerBuild == NOT_AVAILABLE) return TRUE; else if (ApiVerBuild < DllVerBuild) return TRUE; else if (ApiVerBuild > DllVerBuild) return FALSE; else return TRUE; break; default: break; } } return FALSE; } BOOL VADAV_MapDLL(const TCHAR* ADllFName, tVADAV_InterfaceRec* AIntfRec) { memset(AIntfRec, 0, sizeof(tVADAV_InterfaceRec)); TCHAR qDllPath[256]; // define library file name TCHAR* qSaveCurrentDirectory = new TCHAR[256]; if (ADllFName && ADllFName != (const TCHAR*)-1 && *ADllFName) _tcscpy(qDllPath, ADllFName); else { // replace module name with 'GrMxSense.dll' #ifdef __AFXWIN_H__ GetModuleFileName(AfxGetInstanceHandle(), qDllPath, sizeof(qDllPath) / sizeof(TCHAR)); #else GetModuleFileName(0, qDllPath, sizeof(qDllPath) / sizeof(TCHAR)); #endif iDllNameDefault(_tcsrchr(qDllPath, _T('\\')) + 1); if ((int)GetFileAttributes(qDllPath) == -1) { // search the DLL in ./ GetCurrentDirectory(255, qDllPath); int ql = (int)_tcslen(qDllPath); if (ql > 0 && qDllPath[ql - 1] != _T('\\')) { qDllPath[ql] = _T('\\'); qDllPath[ql + 1] = 0; }; iDllNameDefault(qDllPath + _tcslen(qDllPath)); delete qSaveCurrentDirectory; qSaveCurrentDirectory = NULL; }; }; // if ADllName // set working directory (in case of VaIOra.dll depends on some service libraries if (qSaveCurrentDirectory) if (_tcsstr(qDllPath, _T(".\\"))) { delete qSaveCurrentDirectory; qSaveCurrentDirectory = NULL; } else { GetCurrentDirectory(255, qSaveCurrentDirectory); TCHAR* qCh = _tcsrchr(qDllPath, _T('\\')); if (qCh) { *qCh = 0; SetCurrentDirectory(qDllPath); *qCh = _T('\\'); }; }; AIntfRec->rHDLL = LoadLibrary(qDllPath); // load library BOOL qOk = AIntfRec->rHDLL != NULL; if (qSaveCurrentDirectory) { SetCurrentDirectory(qSaveCurrentDirectory); delete qSaveCurrentDirectory; }; if (!qOk) { iErrorMsg(qDllPath, GetLastError()); return FALSE; }; // check library version DWORD qDllVersionSize = 0; TCHAR* qDllVersion; int verMajor, verMinor, verPatch, verBuild; TCHAR qLogMsg[256]; GetModuleFileName(AIntfRec->rHDLL, qDllPath, 1024); qDllVersionSize = GetFileVersionInfoSize(qDllPath, 0); if (qDllVersionSize == 0) goto labLeave; qDllVersion = new TCHAR[qDllVersionSize]; if (qDllVersion != NULL) { if (GetFileVersionInfo(qDllPath, 0, qDllVersionSize, qDllVersion) != 0) { VS_FIXEDFILEINFO* qFileInfo = NULL; UINT bufLen = 0; if (VerQueryValue(qDllVersion, _T("\\"), (LPVOID*)&qFileInfo, &bufLen) != 0) { verMajor = (int)HIWORD(qFileInfo->dwFileVersionMS); verMinor = (int)LOWORD(qFileInfo->dwFileVersionMS); verPatch = (int)HIWORD(qFileInfo->dwFileVersionLS); verBuild = (int)LOWORD(qFileInfo->dwFileVersionLS); _stprintf(qLogMsg, _T("\nLoad %s version %d.%d.%d.%d"), qDllPath, (int)verMajor, (int)verMinor, (int)verPatch, (int)verBuild); OutputDebugString(qLogMsg); } } delete[] qDllVersion; } // map imported functions if (!iGetPA(AIntfRec->rHDLL, _T("VD_IsUnicode"), (FARPROC*)&AIntfRec->rVD_IsUnicode)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_DialogH"), (FARPROC*)&AIntfRec->rVD_Dialog)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_LogOpen"), (FARPROC*)&AIntfRec->rVD_LogOpen)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_LogMsg"), (FARPROC*)&AIntfRec->rVD_LogMsg)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_LogClose"), (FARPROC*)&AIntfRec->rVD_LogClose)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_LogFlush"), (FARPROC*)&AIntfRec->rVD_LogFlush)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetHomeDirectory"), (FARPROC*)&AIntfRec->rVD_GetHomeDirectory)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_IniProfSetSection"), (FARPROC*)&AIntfRec->rVD_IniProfSetSection)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_IniProfGetStr"), (FARPROC*)&AIntfRec->rVD_IniProfGetStr)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_IntParam"), (FARPROC*)&AIntfRec->rVD_IntParam)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_StrParam"), (FARPROC*)&AIntfRec->rVD_StrParam)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetFrameDim"), (FARPROC*)&AIntfRec->rVDACQ_SetFrameDim)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetFrameDim"), (FARPROC*)&AIntfRec->rVDACQ_GetFrameDim)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_Connect"), (FARPROC*)&AIntfRec->rVDACQ_Connect)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetCaptureBuf"), (FARPROC*)&AIntfRec->rVDACQ_SetCaptureBuf)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SendCommand"), (FARPROC*)&AIntfRec->rVDACQ_SendCommand)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SendCommandParam"), (FARPROC*)&AIntfRec->rVDACQ_SendCommandParam)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_StartFrame"), (FARPROC*)&AIntfRec->rVDACQ_StartFrame)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_VendorCommand"), (FARPROC*)&AIntfRec->rVDACQ_VendorCommand)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_Abort"), (FARPROC*)&AIntfRec->rVDACQ_Abort)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_Close"), (FARPROC*)&AIntfRec->rVDACQ_Close)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_Stop"), (FARPROC*)&AIntfRec->rVDACQ_Stop)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_Resume"), (FARPROC*)&AIntfRec->rVDACQ_Resume)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_Capture"), (FARPROC*)&AIntfRec->rVDACQ_Capture)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetDetectorAddr"), (FARPROC*)&AIntfRec->rVDACQ_GetDetectorAddr)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetDetectorAddr"), (FARPROC*)&AIntfRec->rVDACQ_SetDetectorAddr)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetFGRec"), (FARPROC*)&AIntfRec->rVDACQ_SetFGRec)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetFGRec"), (FARPROC*)&AIntfRec->rVDACQ_GetFGRec)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetFGFrameNum"), (FARPROC*)&AIntfRec->rVDACQ_GetFGFrameNum)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_FGFreeze"), (FARPROC*)&AIntfRec->rVDACQ_FGFreeze)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetDetectorInfo"), (FARPROC*)&AIntfRec->rVDACQ_GetDetectorInfo)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetDetectorInfo"), (FARPROC*)&AIntfRec->rVDACQ_SetDetectorInfo)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetVersionFPGA"), (FARPROC*)&AIntfRec->rVDACQ_GetVersionFPGA)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetVersionMCU"), (FARPROC*)&AIntfRec->rVDACQ_GetVersionMCU)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetSerialNumber"), (FARPROC*)&AIntfRec->rVDACQ_GetSerialNumber)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetModelName"), (FARPROC*)&AIntfRec->rVDACQ_GetModelName)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetDetectorState"), (FARPROC*)&AIntfRec->rVDACQ_GetDetectorState)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDC_GetImageDim"), (FARPROC*)&AIntfRec->rVDC_GetImageDim)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDC_CutImage"), (FARPROC*)&AIntfRec->rVDC_CutImage)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDC_ROIImage"), (FARPROC*)&AIntfRec->rVDC_ROIImage)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDC_Process"), (FARPROC*)&AIntfRec->rVDC_Process)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDC_Abort"), (FARPROC*)&AIntfRec->rVDC_Abort)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDC_Close"), (FARPROC*)&AIntfRec->rVDC_Close)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDC_GetCalibrationDirectory"), (FARPROC*)&AIntfRec->rVDC_GetCalibrationDirectory)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDC_SetCalibrationDirectory"), (FARPROC*)&AIntfRec->rVDC_SetCalibrationDirectory)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDC_GetImgCutParams"), (FARPROC*)&AIntfRec->rVDC_GetImgCutParams)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDC_SetImgCutParams"), (FARPROC*)&AIntfRec->rVDC_SetImgCutParams)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDIP_Process"), (FARPROC*)&AIntfRec->rVDIP_Process)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDIP_Abort"), (FARPROC*)&AIntfRec->rVDIP_Abort)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDIP_Close"), (FARPROC*)&AIntfRec->rVDIP_Close)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_Set_Acquisition"), (FARPROC*)&AIntfRec->rVD_Set_Acquisition)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_Set_Calibration"), (FARPROC*)&AIntfRec->rVD_Set_Calibration)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_Set_ImgProcess"), (FARPROC*)&AIntfRec->rVD_Set_ImgProcess)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetImage"), (FARPROC*)&AIntfRec->rVD_GetImage)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetImageA"), (FARPROC*)&AIntfRec->rVD_GetImageA)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetImageSP"), (FARPROC*)&AIntfRec->rVD_GetImageSP)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetImageCancel"), (FARPROC*)&AIntfRec->rVD_GetImageCancel)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDC_GenerateBright"), (FARPROC*)&AIntfRec->rVDC_GenerateBright)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDC_GenerateBPM"), (FARPROC*)&AIntfRec->rVDC_GenerateBPM)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDC_NoiseReduction"), (FARPROC*)&AIntfRec->rVDC_NoiseReduction)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetBinning"), (FARPROC*)&AIntfRec->rVDACQ_SetBinning)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetPartialValue"), (FARPROC*)&AIntfRec->rVDACQ_SetPartialValue)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetFrameRate"), (FARPROC*)&AIntfRec->rVDACQ_SetFrameRate)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetSensitivity"), (FARPROC*)&AIntfRec->rVDACQ_SetSensitivity)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetOneShot"), (FARPROC*)&AIntfRec->rVDACQ_SetOneShot)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetDynamic_Trigger"), (FARPROC*)&AIntfRec->rVDACQ_SetDynamic_Trigger)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetOneShot_Trigger"), (FARPROC*)&AIntfRec->rVDACQ_SetOneShot_Trigger)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetRFMode"), (FARPROC*)&AIntfRec->rVDACQ_SetRFMode)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDC_SetRecursiveFilter"), (FARPROC*)&AIntfRec->rVDC_SetRecursiveFilter)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDC_SetDigitalGain"), (FARPROC*)&AIntfRec->rVDC_SetDigitalGain)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetBinning"), (FARPROC*)&AIntfRec->rVDACQ_GetBinning)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetPartialValue"), (FARPROC*)&AIntfRec->rVDACQ_GetPartialValue)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetFrameRate"), (FARPROC*)&AIntfRec->rVDACQ_GetFrameRate)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetSensitivity"), (FARPROC*)&AIntfRec->rVDACQ_GetSensitivity)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetOneShot"), (FARPROC*)&AIntfRec->rVDACQ_GetOneShot)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetDynamic_Trigger"), (FARPROC*)&AIntfRec->rVDACQ_GetDynamic_Trigger)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetOneShot_Trigger"), (FARPROC*)&AIntfRec->rVDACQ_GetOneShot_Trigger)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetRFMode"), (FARPROC*)&AIntfRec->rVDACQ_GetRFMode)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDC_GetRecursiveFilter"), (FARPROC*)&AIntfRec->rVDC_GetRecursiveFilter)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDC_GetDigitalGain"), (FARPROC*)&AIntfRec->rVDC_GetDigitalGain)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_FreeResource"), (FARPROC*)&AIntfRec->rVD_FreeResource)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetDark"), (FARPROC*)&AIntfRec->rVD_GetDark)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetDark_Forced"), (FARPROC*)&AIntfRec->rVD_GetDark_Forced)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetBright"), (FARPROC*)&AIntfRec->rVD_GetBright)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetBright2"), (FARPROC*)&AIntfRec->rVD_GetBright2)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_Grab"), (FARPROC*)&AIntfRec->rVD_Grab)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetCaptureBuf"), (FARPROC*)&AIntfRec->rVDACQ_SetCaptureBuf)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_RegisterCallbackInfo"), (FARPROC*)&AIntfRec->rVD_RegisterCallbackInfo)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDC_CalDir"), (FARPROC*)&AIntfRec->rVDC_CalDir)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_IniSave"), (FARPROC*)&AIntfRec->rVD_IniSave)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SecondCtrl"), (FARPROC*)&AIntfRec->rVDACQ_SecondCtrl)) goto labLeave; if (iDllVersionCheck(6272, NOT_AVAILABLE, 21316, NOT_AVAILABLE, verMajor, verMinor, verPatch, verBuild)) { if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetCaptureExposureTime"), (FARPROC*)&AIntfRec->rVDACQ_GetCaptureExposureTime)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetCaptureExposureTime"), (FARPROC*)&AIntfRec->rVDACQ_SetCaptureExposureTime)) goto labLeave; } if (iDllVersionCheck(6272, NOT_AVAILABLE, 22136, NOT_AVAILABLE, verMajor, verMinor, verPatch, verBuild)) { if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_ModeLock"), (FARPROC*)&AIntfRec->rVDACQ_ModeLock)) goto labLeave; } if (iDllVersionCheck(6273, NOT_AVAILABLE, 22176, NOT_AVAILABLE, verMajor, verMinor, verPatch, verBuild)) { if (!iGetPA(AIntfRec->rHDLL, _T("VD_IntgTimeCalibration"), (FARPROC*)&AIntfRec->rVD_IntgTimeCalibration)) goto labLeave; } if (iDllVersionCheck(6273, NOT_AVAILABLE, 22194, NOT_AVAILABLE, verMajor, verMinor, verPatch, verBuild)) { if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetCaptureWaitTime"), (FARPROC*)&AIntfRec->rVDACQ_GetCaptureWaitTime)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetCaptureWaitTime"), (FARPROC*)&AIntfRec->rVDACQ_SetCaptureWaitTime)) goto labLeave; } if (iDllVersionCheck(6273, NOT_AVAILABLE, 22251, NOT_AVAILABLE, verMajor, verMinor, verPatch, verBuild)) { if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetDetectorMode"), (FARPROC*)&AIntfRec->rVD_GetDetectorMode)) goto labLeave; } if (iDllVersionCheck(6273, NOT_AVAILABLE, 22333, NOT_AVAILABLE, verMajor, verMinor, verPatch, verBuild)) { if (!iGetPA(AIntfRec->rHDLL, _T("VD_GenerateBPM"), (FARPROC*)&AIntfRec->rVD_GenerateBPM)) goto labLeave; } if (iDllVersionCheck(6273, NOT_AVAILABLE, 23005, NOT_AVAILABLE, verMajor, verMinor, verPatch, verBuild)) { if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_DarkReloadInAcquisition"), (FARPROC*)&AIntfRec->rVDACQ_DarkReloadInAcquisition)) goto labLeave; } if (iDllVersionCheck(6275, NOT_AVAILABLE, 23187, NOT_AVAILABLE, verMajor, verMinor, verPatch, verBuild)) { if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetVersionVADAV"), (FARPROC*)&AIntfRec->rVD_GetVersionVADAV)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetVersionVACAL"), (FARPROC*)&AIntfRec->rVD_GetVersionVACAL)) goto labLeave; if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetVersionView16"), (FARPROC*)&AIntfRec->rVD_GetVersionView16)) goto labLeave; } if (iDllVersionCheck(6275, NOT_AVAILABLE, 24102, NOT_AVAILABLE, verMajor, verMinor, verPatch, verBuild)) { if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_Capture2"), (FARPROC*)&AIntfRec->rVDACQ_Capture2)) goto labLeave; } //void(_stdcall *rVD_ResigterCallbackInfo)(void *); // check Unicode if (AIntfRec->rVD_IsUnicode() != (BOOL)(sizeof(TCHAR) != sizeof(char))) { iErrorMsg(_T("UNICODE/MBCS does not match"), 0); qOk = FALSE; goto labLeave; }; // success qOk = TRUE; // leave labLeave: if (!qOk) VADAV_ReleaseDLL(AIntfRec); return qOk; } void VADAV_ReleaseDLL(tVADAV_InterfaceRec* AIntfRec) { AIntfRec->rVD_FreeResource(); if (AIntfRec->rHDLL) { FreeLibrary(AIntfRec->rHDLL); AIntfRec->rHDLL = NULL; }; }