VADAVIntf.cpp 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447
  1. /** *************************************************************** **
  2. ** Radiography Detector: application interface **
  3. ** (c) VATech & E-Woo by S.B. **
  4. ** *************************************************************** **/
  5. #include "stdafx.h"
  6. #include "windows.h"
  7. #include "tchar.h"
  8. #include "VADAVIntf.h"
  9. #pragma comment(lib, "version.lib")
  10. #define NOT_AVAILABLE (int)-1
  11. static void iErrorMsg(const TCHAR* AMsg, int AErrCode)
  12. {
  13. TCHAR qMsg[256], qErrDescr[180];
  14. _tcscpy(qMsg, AMsg);
  15. if (AErrCode) {
  16. _tcscat(qMsg, _T("\n"));
  17. if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, AErrCode, 0,
  18. qErrDescr, sizeof(qErrDescr) - 1, NULL) <= 0)
  19. _stprintf(qErrDescr, _T("Error code #%d (%Xh)"), AErrCode, AErrCode);
  20. else
  21. _stprintf(qErrDescr + _tcslen(qErrDescr), _T(" #%d"), AErrCode);
  22. _tcscat(qMsg, qErrDescr);
  23. }; // if AErrCode
  24. MessageBox(NULL, qMsg, _T("X-ray detector library's load error"), MB_OK | MB_ICONSTOP);
  25. }
  26. static BOOL iGetPA(HINSTANCE AHDll, const TCHAR* AFuncName, FARPROC* AFuncRef)
  27. {
  28. #ifdef UNICODE
  29. char qFuncName[80];
  30. WideCharToMultiByte(CP_ACP, 0, AFuncName, -1, qFuncName, 79, NULL, NULL);
  31. *AFuncRef = GetProcAddress(AHDll, qFuncName);
  32. #else
  33. * AFuncRef = GetProcAddress(AHDll, AFuncName);
  34. #endif
  35. if (*AFuncRef)
  36. return TRUE;
  37. TCHAR qErrMsg[256];
  38. _tcscpy(qErrMsg, _T("Can't find exported procedure \""));
  39. _tcscat(qErrMsg, AFuncName); _tcscat(qErrMsg, _T("\""));
  40. iErrorMsg(qErrMsg, 0);
  41. return FALSE;
  42. }
  43. static void iDllNameDefault(TCHAR* ADllFName)
  44. {
  45. _tcscpy(ADllFName, _T("VADAV_FGM.dll"));
  46. #ifdef _WIN64
  47. _tcscpy(_tcsrchr(ADllFName, _T('.')), _T("_64.dll"));
  48. #endif
  49. }
  50. BOOL iDllVersionCheck(int ApiVerMajor, int ApiVerMinor, int ApiVerPatch, int ApiVerBuild,
  51. int DllVerMajor, int DllVerMinor, int DllVerPatch, int DllVerBuild)
  52. {
  53. BOOL qOK = TRUE;
  54. for (int i = 0; i < 4; i++)
  55. {
  56. switch (i)
  57. {
  58. case 0: // Version major
  59. if (ApiVerMajor == NOT_AVAILABLE) continue;
  60. else if (ApiVerMajor < DllVerMajor) return TRUE;
  61. else if (ApiVerMajor > DllVerMajor) return FALSE;
  62. else continue;
  63. break;
  64. case 1: // Version minor
  65. if (ApiVerMinor == NOT_AVAILABLE) continue;
  66. else if (ApiVerMinor < DllVerMinor) return TRUE;
  67. else if (ApiVerMinor > DllVerMinor) return FALSE;
  68. else continue;
  69. break;
  70. case 2: // Version patch
  71. if (ApiVerPatch == NOT_AVAILABLE) continue;
  72. else if (ApiVerPatch < DllVerPatch) return TRUE;
  73. else if (ApiVerPatch > DllVerPatch) return FALSE;
  74. else continue;
  75. break;
  76. case 3: // Version build
  77. if (ApiVerBuild == NOT_AVAILABLE) return TRUE;
  78. else if (ApiVerBuild < DllVerBuild) return TRUE;
  79. else if (ApiVerBuild > DllVerBuild) return FALSE;
  80. else return TRUE;
  81. break;
  82. default:
  83. break;
  84. }
  85. }
  86. return FALSE;
  87. }
  88. BOOL VADAV_MapDLL(const TCHAR* ADllFName, tVADAV_InterfaceRec* AIntfRec)
  89. {
  90. memset(AIntfRec, 0, sizeof(tVADAV_InterfaceRec));
  91. TCHAR qDllPath[256]; // define library file name
  92. TCHAR* qSaveCurrentDirectory = new TCHAR[256];
  93. if (ADllFName && ADllFName != (const TCHAR*)-1 && *ADllFName)
  94. _tcscpy(qDllPath, ADllFName);
  95. else { // replace module name with 'GrMxSense.dll'
  96. #ifdef __AFXWIN_H__
  97. GetModuleFileName(AfxGetInstanceHandle(), qDllPath, sizeof(qDllPath) / sizeof(TCHAR));
  98. #else
  99. GetModuleFileName(0, qDllPath, sizeof(qDllPath) / sizeof(TCHAR));
  100. #endif
  101. iDllNameDefault(_tcsrchr(qDllPath, _T('\\')) + 1);
  102. if ((int)GetFileAttributes(qDllPath) == -1) { // search the DLL in ./
  103. GetCurrentDirectory(255, qDllPath);
  104. int ql = (int)_tcslen(qDllPath);
  105. if (ql > 0 && qDllPath[ql - 1] != _T('\\')) {
  106. qDllPath[ql] = _T('\\');
  107. qDllPath[ql + 1] = 0;
  108. };
  109. iDllNameDefault(qDllPath + _tcslen(qDllPath));
  110. delete qSaveCurrentDirectory;
  111. qSaveCurrentDirectory = NULL;
  112. };
  113. }; // if ADllName
  114. // set working directory (in case of VaIOra.dll depends on some service libraries
  115. if (qSaveCurrentDirectory)
  116. if (_tcsstr(qDllPath, _T(".\\"))) {
  117. delete qSaveCurrentDirectory;
  118. qSaveCurrentDirectory = NULL;
  119. }
  120. else {
  121. GetCurrentDirectory(255, qSaveCurrentDirectory);
  122. TCHAR* qCh = _tcsrchr(qDllPath, _T('\\'));
  123. if (qCh) {
  124. *qCh = 0;
  125. SetCurrentDirectory(qDllPath);
  126. *qCh = _T('\\');
  127. };
  128. };
  129. AIntfRec->rHDLL = LoadLibrary(qDllPath); // load library
  130. BOOL qOk = AIntfRec->rHDLL != NULL;
  131. if (qSaveCurrentDirectory) {
  132. SetCurrentDirectory(qSaveCurrentDirectory);
  133. delete qSaveCurrentDirectory;
  134. };
  135. if (!qOk) {
  136. iErrorMsg(qDllPath, GetLastError());
  137. return FALSE;
  138. };
  139. // check library version
  140. DWORD qDllVersionSize = 0;
  141. TCHAR* qDllVersion;
  142. int verMajor, verMinor, verPatch, verBuild;
  143. TCHAR qLogMsg[256];
  144. GetModuleFileName(AIntfRec->rHDLL, qDllPath, 1024);
  145. qDllVersionSize = GetFileVersionInfoSize(qDllPath, 0);
  146. if (qDllVersionSize == 0) goto labLeave;
  147. qDllVersion = new TCHAR[qDllVersionSize];
  148. if (qDllVersion != NULL)
  149. {
  150. if (GetFileVersionInfo(qDllPath, 0, qDllVersionSize, qDllVersion) != 0)
  151. {
  152. VS_FIXEDFILEINFO* qFileInfo = NULL;
  153. UINT bufLen = 0;
  154. if (VerQueryValue(qDllVersion, _T("\\"), (LPVOID*)&qFileInfo, &bufLen) != 0)
  155. {
  156. verMajor = (int)HIWORD(qFileInfo->dwFileVersionMS);
  157. verMinor = (int)LOWORD(qFileInfo->dwFileVersionMS);
  158. verPatch = (int)HIWORD(qFileInfo->dwFileVersionLS);
  159. verBuild = (int)LOWORD(qFileInfo->dwFileVersionLS);
  160. _stprintf(qLogMsg, _T("\nLoad %s version %d.%d.%d.%d"), qDllPath, (int)verMajor, (int)verMinor, (int)verPatch, (int)verBuild);
  161. OutputDebugString(qLogMsg);
  162. }
  163. }
  164. delete[] qDllVersion;
  165. }
  166. // map imported functions
  167. if (!iGetPA(AIntfRec->rHDLL, _T("VD_IsUnicode"), (FARPROC*)&AIntfRec->rVD_IsUnicode))
  168. goto labLeave;
  169. if (!iGetPA(AIntfRec->rHDLL, _T("VD_DialogH"), (FARPROC*)&AIntfRec->rVD_Dialog))
  170. goto labLeave;
  171. if (!iGetPA(AIntfRec->rHDLL, _T("VD_LogOpen"), (FARPROC*)&AIntfRec->rVD_LogOpen))
  172. goto labLeave;
  173. if (!iGetPA(AIntfRec->rHDLL, _T("VD_LogMsg"), (FARPROC*)&AIntfRec->rVD_LogMsg))
  174. goto labLeave;
  175. if (!iGetPA(AIntfRec->rHDLL, _T("VD_LogClose"), (FARPROC*)&AIntfRec->rVD_LogClose))
  176. goto labLeave;
  177. if (!iGetPA(AIntfRec->rHDLL, _T("VD_LogFlush"), (FARPROC*)&AIntfRec->rVD_LogFlush))
  178. goto labLeave;
  179. if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetHomeDirectory"), (FARPROC*)&AIntfRec->rVD_GetHomeDirectory))
  180. goto labLeave;
  181. if (!iGetPA(AIntfRec->rHDLL, _T("VD_IniProfSetSection"), (FARPROC*)&AIntfRec->rVD_IniProfSetSection))
  182. goto labLeave;
  183. if (!iGetPA(AIntfRec->rHDLL, _T("VD_IniProfGetStr"), (FARPROC*)&AIntfRec->rVD_IniProfGetStr))
  184. goto labLeave;
  185. if (!iGetPA(AIntfRec->rHDLL, _T("VD_IntParam"), (FARPROC*)&AIntfRec->rVD_IntParam))
  186. goto labLeave;
  187. if (!iGetPA(AIntfRec->rHDLL, _T("VD_StrParam"), (FARPROC*)&AIntfRec->rVD_StrParam))
  188. goto labLeave;
  189. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetFrameDim"), (FARPROC*)&AIntfRec->rVDACQ_SetFrameDim))
  190. goto labLeave;
  191. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetFrameDim"), (FARPROC*)&AIntfRec->rVDACQ_GetFrameDim))
  192. goto labLeave;
  193. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_Connect"), (FARPROC*)&AIntfRec->rVDACQ_Connect))
  194. goto labLeave;
  195. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetCaptureBuf"), (FARPROC*)&AIntfRec->rVDACQ_SetCaptureBuf))
  196. goto labLeave;
  197. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SendCommand"), (FARPROC*)&AIntfRec->rVDACQ_SendCommand))
  198. goto labLeave;
  199. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SendCommandParam"), (FARPROC*)&AIntfRec->rVDACQ_SendCommandParam))
  200. goto labLeave;
  201. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_StartFrame"), (FARPROC*)&AIntfRec->rVDACQ_StartFrame))
  202. goto labLeave;
  203. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_VendorCommand"), (FARPROC*)&AIntfRec->rVDACQ_VendorCommand))
  204. goto labLeave;
  205. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_Abort"), (FARPROC*)&AIntfRec->rVDACQ_Abort))
  206. goto labLeave;
  207. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_Close"), (FARPROC*)&AIntfRec->rVDACQ_Close))
  208. goto labLeave;
  209. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_Stop"), (FARPROC*)&AIntfRec->rVDACQ_Stop))
  210. goto labLeave;
  211. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_Resume"), (FARPROC*)&AIntfRec->rVDACQ_Resume))
  212. goto labLeave;
  213. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_Capture"), (FARPROC*)&AIntfRec->rVDACQ_Capture))
  214. goto labLeave;
  215. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetDetectorAddr"), (FARPROC*)&AIntfRec->rVDACQ_GetDetectorAddr))
  216. goto labLeave;
  217. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetDetectorAddr"), (FARPROC*)&AIntfRec->rVDACQ_SetDetectorAddr))
  218. goto labLeave;
  219. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetFGRec"), (FARPROC*)&AIntfRec->rVDACQ_SetFGRec))
  220. goto labLeave;
  221. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetFGRec"), (FARPROC*)&AIntfRec->rVDACQ_GetFGRec))
  222. goto labLeave;
  223. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetFGFrameNum"), (FARPROC*)&AIntfRec->rVDACQ_GetFGFrameNum))
  224. goto labLeave;
  225. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_FGFreeze"), (FARPROC*)&AIntfRec->rVDACQ_FGFreeze))
  226. goto labLeave;
  227. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetDetectorInfo"), (FARPROC*)&AIntfRec->rVDACQ_GetDetectorInfo))
  228. goto labLeave;
  229. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetDetectorInfo"), (FARPROC*)&AIntfRec->rVDACQ_SetDetectorInfo))
  230. goto labLeave;
  231. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetVersionFPGA"), (FARPROC*)&AIntfRec->rVDACQ_GetVersionFPGA))
  232. goto labLeave;
  233. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetVersionMCU"), (FARPROC*)&AIntfRec->rVDACQ_GetVersionMCU))
  234. goto labLeave;
  235. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetSerialNumber"), (FARPROC*)&AIntfRec->rVDACQ_GetSerialNumber))
  236. goto labLeave;
  237. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetModelName"), (FARPROC*)&AIntfRec->rVDACQ_GetModelName))
  238. goto labLeave;
  239. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetDetectorState"), (FARPROC*)&AIntfRec->rVDACQ_GetDetectorState))
  240. goto labLeave;
  241. if (!iGetPA(AIntfRec->rHDLL, _T("VDC_GetImageDim"), (FARPROC*)&AIntfRec->rVDC_GetImageDim))
  242. goto labLeave;
  243. if (!iGetPA(AIntfRec->rHDLL, _T("VDC_CutImage"), (FARPROC*)&AIntfRec->rVDC_CutImage))
  244. goto labLeave;
  245. if (!iGetPA(AIntfRec->rHDLL, _T("VDC_ROIImage"), (FARPROC*)&AIntfRec->rVDC_ROIImage))
  246. goto labLeave;
  247. if (!iGetPA(AIntfRec->rHDLL, _T("VDC_Process"), (FARPROC*)&AIntfRec->rVDC_Process))
  248. goto labLeave;
  249. if (!iGetPA(AIntfRec->rHDLL, _T("VDC_Abort"), (FARPROC*)&AIntfRec->rVDC_Abort))
  250. goto labLeave;
  251. if (!iGetPA(AIntfRec->rHDLL, _T("VDC_Close"), (FARPROC*)&AIntfRec->rVDC_Close))
  252. goto labLeave;
  253. if (!iGetPA(AIntfRec->rHDLL, _T("VDC_GetCalibrationDirectory"), (FARPROC*)&AIntfRec->rVDC_GetCalibrationDirectory))
  254. goto labLeave;
  255. if (!iGetPA(AIntfRec->rHDLL, _T("VDC_SetCalibrationDirectory"), (FARPROC*)&AIntfRec->rVDC_SetCalibrationDirectory))
  256. goto labLeave;
  257. if (!iGetPA(AIntfRec->rHDLL, _T("VDC_GetImgCutParams"), (FARPROC*)&AIntfRec->rVDC_GetImgCutParams))
  258. goto labLeave;
  259. if (!iGetPA(AIntfRec->rHDLL, _T("VDC_SetImgCutParams"), (FARPROC*)&AIntfRec->rVDC_SetImgCutParams))
  260. goto labLeave;
  261. if (!iGetPA(AIntfRec->rHDLL, _T("VDIP_Process"), (FARPROC*)&AIntfRec->rVDIP_Process))
  262. goto labLeave;
  263. if (!iGetPA(AIntfRec->rHDLL, _T("VDIP_Abort"), (FARPROC*)&AIntfRec->rVDIP_Abort))
  264. goto labLeave;
  265. if (!iGetPA(AIntfRec->rHDLL, _T("VDIP_Close"), (FARPROC*)&AIntfRec->rVDIP_Close))
  266. goto labLeave;
  267. if (!iGetPA(AIntfRec->rHDLL, _T("VD_Set_Acquisition"), (FARPROC*)&AIntfRec->rVD_Set_Acquisition))
  268. goto labLeave;
  269. if (!iGetPA(AIntfRec->rHDLL, _T("VD_Set_Calibration"), (FARPROC*)&AIntfRec->rVD_Set_Calibration))
  270. goto labLeave;
  271. if (!iGetPA(AIntfRec->rHDLL, _T("VD_Set_ImgProcess"), (FARPROC*)&AIntfRec->rVD_Set_ImgProcess))
  272. goto labLeave;
  273. if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetImage"), (FARPROC*)&AIntfRec->rVD_GetImage))
  274. goto labLeave;
  275. if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetImageA"), (FARPROC*)&AIntfRec->rVD_GetImageA))
  276. goto labLeave;
  277. if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetImageSP"), (FARPROC*)&AIntfRec->rVD_GetImageSP))
  278. goto labLeave;
  279. if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetImageCancel"), (FARPROC*)&AIntfRec->rVD_GetImageCancel))
  280. goto labLeave;
  281. if (!iGetPA(AIntfRec->rHDLL, _T("VDC_GenerateBright"), (FARPROC*)&AIntfRec->rVDC_GenerateBright))
  282. goto labLeave;
  283. if (!iGetPA(AIntfRec->rHDLL, _T("VDC_GenerateBPM"), (FARPROC*)&AIntfRec->rVDC_GenerateBPM))
  284. goto labLeave;
  285. if (!iGetPA(AIntfRec->rHDLL, _T("VDC_NoiseReduction"), (FARPROC*)&AIntfRec->rVDC_NoiseReduction))
  286. goto labLeave;
  287. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetBinning"), (FARPROC*)&AIntfRec->rVDACQ_SetBinning))
  288. goto labLeave;
  289. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetPartialValue"), (FARPROC*)&AIntfRec->rVDACQ_SetPartialValue))
  290. goto labLeave;
  291. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetFrameRate"), (FARPROC*)&AIntfRec->rVDACQ_SetFrameRate))
  292. goto labLeave;
  293. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetSensitivity"), (FARPROC*)&AIntfRec->rVDACQ_SetSensitivity))
  294. goto labLeave;
  295. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetOneShot"), (FARPROC*)&AIntfRec->rVDACQ_SetOneShot))
  296. goto labLeave;
  297. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetDynamic_Trigger"), (FARPROC*)&AIntfRec->rVDACQ_SetDynamic_Trigger))
  298. goto labLeave;
  299. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetOneShot_Trigger"), (FARPROC*)&AIntfRec->rVDACQ_SetOneShot_Trigger))
  300. goto labLeave;
  301. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetRFMode"), (FARPROC*)&AIntfRec->rVDACQ_SetRFMode))
  302. goto labLeave;
  303. if (!iGetPA(AIntfRec->rHDLL, _T("VDC_SetRecursiveFilter"), (FARPROC*)&AIntfRec->rVDC_SetRecursiveFilter))
  304. goto labLeave;
  305. if (!iGetPA(AIntfRec->rHDLL, _T("VDC_SetDigitalGain"), (FARPROC*)&AIntfRec->rVDC_SetDigitalGain))
  306. goto labLeave;
  307. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetBinning"), (FARPROC*)&AIntfRec->rVDACQ_GetBinning))
  308. goto labLeave;
  309. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetPartialValue"), (FARPROC*)&AIntfRec->rVDACQ_GetPartialValue))
  310. goto labLeave;
  311. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetFrameRate"), (FARPROC*)&AIntfRec->rVDACQ_GetFrameRate))
  312. goto labLeave;
  313. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetSensitivity"), (FARPROC*)&AIntfRec->rVDACQ_GetSensitivity))
  314. goto labLeave;
  315. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetOneShot"), (FARPROC*)&AIntfRec->rVDACQ_GetOneShot))
  316. goto labLeave;
  317. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetDynamic_Trigger"), (FARPROC*)&AIntfRec->rVDACQ_GetDynamic_Trigger))
  318. goto labLeave;
  319. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetOneShot_Trigger"), (FARPROC*)&AIntfRec->rVDACQ_GetOneShot_Trigger))
  320. goto labLeave;
  321. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetRFMode"), (FARPROC*)&AIntfRec->rVDACQ_GetRFMode))
  322. goto labLeave;
  323. if (!iGetPA(AIntfRec->rHDLL, _T("VDC_GetRecursiveFilter"), (FARPROC*)&AIntfRec->rVDC_GetRecursiveFilter))
  324. goto labLeave;
  325. if (!iGetPA(AIntfRec->rHDLL, _T("VDC_GetDigitalGain"), (FARPROC*)&AIntfRec->rVDC_GetDigitalGain))
  326. goto labLeave;
  327. if (!iGetPA(AIntfRec->rHDLL, _T("VD_FreeResource"), (FARPROC*)&AIntfRec->rVD_FreeResource))
  328. goto labLeave;
  329. if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetDark"), (FARPROC*)&AIntfRec->rVD_GetDark))
  330. goto labLeave;
  331. if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetDark_Forced"), (FARPROC*)&AIntfRec->rVD_GetDark_Forced))
  332. goto labLeave;
  333. if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetBright"), (FARPROC*)&AIntfRec->rVD_GetBright))
  334. goto labLeave;
  335. if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetBright2"), (FARPROC*)&AIntfRec->rVD_GetBright2))
  336. goto labLeave;
  337. if (!iGetPA(AIntfRec->rHDLL, _T("VD_Grab"), (FARPROC*)&AIntfRec->rVD_Grab))
  338. goto labLeave;
  339. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetCaptureBuf"), (FARPROC*)&AIntfRec->rVDACQ_SetCaptureBuf))
  340. goto labLeave;
  341. if (!iGetPA(AIntfRec->rHDLL, _T("VD_RegisterCallbackInfo"), (FARPROC*)&AIntfRec->rVD_RegisterCallbackInfo))
  342. goto labLeave;
  343. if (!iGetPA(AIntfRec->rHDLL, _T("VDC_CalDir"), (FARPROC*)&AIntfRec->rVDC_CalDir))
  344. goto labLeave;
  345. if (!iGetPA(AIntfRec->rHDLL, _T("VD_IniSave"), (FARPROC*)&AIntfRec->rVD_IniSave))
  346. goto labLeave;
  347. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SecondCtrl"), (FARPROC*)&AIntfRec->rVDACQ_SecondCtrl))
  348. goto labLeave;
  349. if (iDllVersionCheck(6272, NOT_AVAILABLE, 21316, NOT_AVAILABLE, verMajor, verMinor, verPatch, verBuild))
  350. {
  351. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetCaptureExposureTime"), (FARPROC*)&AIntfRec->rVDACQ_GetCaptureExposureTime))
  352. goto labLeave;
  353. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetCaptureExposureTime"), (FARPROC*)&AIntfRec->rVDACQ_SetCaptureExposureTime))
  354. goto labLeave;
  355. }
  356. if (iDllVersionCheck(6272, NOT_AVAILABLE, 22136, NOT_AVAILABLE, verMajor, verMinor, verPatch, verBuild))
  357. {
  358. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_ModeLock"), (FARPROC*)&AIntfRec->rVDACQ_ModeLock))
  359. goto labLeave;
  360. }
  361. if (iDllVersionCheck(6273, NOT_AVAILABLE, 22176, NOT_AVAILABLE, verMajor, verMinor, verPatch, verBuild))
  362. {
  363. if (!iGetPA(AIntfRec->rHDLL, _T("VD_IntgTimeCalibration"), (FARPROC*)&AIntfRec->rVD_IntgTimeCalibration))
  364. goto labLeave;
  365. }
  366. if (iDllVersionCheck(6273, NOT_AVAILABLE, 22194, NOT_AVAILABLE, verMajor, verMinor, verPatch, verBuild))
  367. {
  368. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_GetCaptureWaitTime"), (FARPROC*)&AIntfRec->rVDACQ_GetCaptureWaitTime))
  369. goto labLeave;
  370. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_SetCaptureWaitTime"), (FARPROC*)&AIntfRec->rVDACQ_SetCaptureWaitTime))
  371. goto labLeave;
  372. }
  373. if (iDllVersionCheck(6273, NOT_AVAILABLE, 22251, NOT_AVAILABLE, verMajor, verMinor, verPatch, verBuild))
  374. {
  375. if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetDetectorMode"), (FARPROC*)&AIntfRec->rVD_GetDetectorMode))
  376. goto labLeave;
  377. }
  378. if (iDllVersionCheck(6273, NOT_AVAILABLE, 22333, NOT_AVAILABLE, verMajor, verMinor, verPatch, verBuild))
  379. {
  380. if (!iGetPA(AIntfRec->rHDLL, _T("VD_GenerateBPM"), (FARPROC*)&AIntfRec->rVD_GenerateBPM))
  381. goto labLeave;
  382. }
  383. if (iDllVersionCheck(6273, NOT_AVAILABLE, 23005, NOT_AVAILABLE, verMajor, verMinor, verPatch, verBuild))
  384. {
  385. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_DarkReloadInAcquisition"), (FARPROC*)&AIntfRec->rVDACQ_DarkReloadInAcquisition))
  386. goto labLeave;
  387. }
  388. if (iDllVersionCheck(6275, NOT_AVAILABLE, 23187, NOT_AVAILABLE, verMajor, verMinor, verPatch, verBuild))
  389. {
  390. if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetVersionVADAV"), (FARPROC*)&AIntfRec->rVD_GetVersionVADAV))
  391. goto labLeave;
  392. if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetVersionVACAL"), (FARPROC*)&AIntfRec->rVD_GetVersionVACAL))
  393. goto labLeave;
  394. if (!iGetPA(AIntfRec->rHDLL, _T("VD_GetVersionView16"), (FARPROC*)&AIntfRec->rVD_GetVersionView16))
  395. goto labLeave;
  396. }
  397. if (iDllVersionCheck(6275, NOT_AVAILABLE, 24102, NOT_AVAILABLE, verMajor, verMinor, verPatch, verBuild))
  398. {
  399. if (!iGetPA(AIntfRec->rHDLL, _T("VDACQ_Capture2"), (FARPROC*)&AIntfRec->rVDACQ_Capture2))
  400. goto labLeave;
  401. }
  402. //void(_stdcall *rVD_ResigterCallbackInfo)(void *);
  403. // check Unicode
  404. if (AIntfRec->rVD_IsUnicode() != (BOOL)(sizeof(TCHAR) != sizeof(char))) {
  405. iErrorMsg(_T("UNICODE/MBCS does not match"), 0);
  406. qOk = FALSE;
  407. goto labLeave;
  408. };
  409. // success
  410. qOk = TRUE;
  411. // leave
  412. labLeave:
  413. if (!qOk)
  414. VADAV_ReleaseDLL(AIntfRec);
  415. return qOk;
  416. }
  417. void VADAV_ReleaseDLL(tVADAV_InterfaceRec* AIntfRec)
  418. {
  419. AIntfRec->rVD_FreeResource();
  420. if (AIntfRec->rHDLL) {
  421. FreeLibrary(AIntfRec->rHDLL);
  422. AIntfRec->rHDLL = NULL;
  423. };
  424. }