libHSPSCannerLoader.cpp 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. // libHSPSCannerLoader.cpp : 定义 DLL 应用程序的导出函数。
  2. //
  3. #include "stdafx.h"
  4. #include <Windows.h>
  5. #include < stdio.h >
  6. #include "libHSPSCannerLoader.h"
  7. typedef ErrorCodeEnum(*DevAdaptObjCreateFunc)(DeviceBaseClass*& baseObj);
  8. typedef ErrorCodeEnum(*DevAdaptObjReleaseFunc)(DeviceBaseClass*& pBaseObj);
  9. HINSTANCE hinstLib = NULL;
  10. DevAdaptObjCreateFunc pFuncCreateAdapt = NULL;
  11. DevAdaptObjReleaseFunc pFuncReleaseAdapt = NULL;
  12. CHSPSClass* pDevAdapterInstance = NULL;
  13. struct DevErrorInfo errInfoInstance;
  14. void SetLastErrInfo(const char* formatStr, ...)
  15. {
  16. va_list arg;
  17. va_start(arg, formatStr);
  18. sprintf_s(errInfoInstance.szErrMsg, MAX_DEV_ERROR_MSG_LEN, formatStr, arg);
  19. errInfoInstance.dwErrMsgLen = strlen(errInfoInstance.szErrMsg);
  20. va_end(arg);
  21. }
  22. LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_LoadDevObject(const char* libraryPath)
  23. {
  24. ErrorCodeEnum erroCode;
  25. hinstLib = LoadLibraryA(libraryPath);
  26. if (hinstLib != NULL) {
  27. pFuncCreateAdapt = (DevAdaptObjCreateFunc)GetProcAddress(hinstLib, "CreateDevComponent");
  28. if (NULL == pFuncCreateAdapt) {
  29. FreeLibrary(hinstLib);
  30. pFuncCreateAdapt = NULL;
  31. pFuncReleaseAdapt = NULL;
  32. return Error_MisMatched;
  33. }
  34. pFuncReleaseAdapt = (DevAdaptObjReleaseFunc)GetProcAddress(hinstLib, "ReleaseDevComponent");
  35. if (NULL == pFuncCreateAdapt) {
  36. FreeLibrary(hinstLib);
  37. pFuncCreateAdapt = NULL;
  38. pFuncReleaseAdapt = NULL;
  39. return Error_NotIntegrated;
  40. }
  41. erroCode = pFuncCreateAdapt((DeviceBaseClass*&)pDevAdapterInstance);
  42. if (erroCode != Error_Succeed) {
  43. pDevAdapterInstance = NULL;
  44. FreeLibrary(hinstLib);
  45. pFuncCreateAdapt = NULL;
  46. pFuncReleaseAdapt = NULL;
  47. return Error_NoTarget;
  48. }
  49. if (pDevAdapterInstance == NULL) {
  50. FreeLibrary(hinstLib);
  51. pFuncCreateAdapt = NULL;
  52. pFuncReleaseAdapt = NULL;
  53. return Error_Null;
  54. }
  55. } else {
  56. SetLastErrInfo("load library failed %d", GetLastError());
  57. return Error_DevLoadFileFailed;
  58. }
  59. return Error_Succeed;
  60. }
  61. LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_ReleaseDevObject()
  62. {
  63. if (pFuncReleaseAdapt != NULL && pDevAdapterInstance != NULL) {
  64. DeviceBaseClass* devBasePtr = static_cast<DeviceBaseClass*>(pDevAdapterInstance);
  65. pFuncReleaseAdapt(devBasePtr);
  66. pDevAdapterInstance = NULL;
  67. }
  68. if (hinstLib != NULL) {
  69. FreeLibrary(hinstLib);
  70. hinstLib = NULL;
  71. }
  72. return Error_Succeed;
  73. }
  74. //////////////////////////////////////////////////////////////////////////
  75. LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_GetDevCategory(DevCategoryInfo* pDevCategory)
  76. {
  77. ErrorCodeEnum result;
  78. if (pDevAdapterInstance == NULL) {
  79. return Error_NotInit;
  80. }
  81. DevCategoryInfo inner;
  82. memset(inner.szType, 0, sizeof(char) * MAX_DEV_TYPE_LEN);
  83. memset(inner.szModel, 0, sizeof(char) * MAX_DEV_MODEL_LEN);
  84. memset(inner.szVendor, 0, sizeof(char) * MAX_DEV_VENDOR_LEN);
  85. result = pDevAdapterInstance->GetDevCategory(inner);
  86. if (result == Error_Succeed) {
  87. memset(pDevCategory->szType, 0, sizeof(char) * MAX_DEV_TYPE_LEN);
  88. memset(pDevCategory->szModel, 0, sizeof(char) * MAX_DEV_MODEL_LEN);
  89. memset(pDevCategory->szVendor, 0, sizeof(char) * MAX_DEV_VENDOR_LEN);
  90. strncpy_s(pDevCategory->szType, MAX_DEV_TYPE_LEN, inner.szType, strlen(inner.szType) > MAX_DEV_TYPE_LEN - 1 ? MAX_DEV_TYPE_LEN - 1 : strlen(inner.szType));
  91. strncpy_s(pDevCategory->szModel, MAX_DEV_MODEL_LEN, inner.szModel, strlen(inner.szModel) > MAX_DEV_MODEL_LEN - 1 ? MAX_DEV_TYPE_LEN - 1 : strlen(inner.szModel));
  92. strncpy_s(pDevCategory->szVendor, MAX_DEV_VENDOR_LEN, inner.szVendor, strlen(inner.szVendor) > MAX_DEV_VENDOR_LEN - 1 ? MAX_DEV_TYPE_LEN - 1 : strlen(inner.szVendor));
  93. pDevCategory->eState = inner.eState;
  94. pDevCategory->version.wMajor = inner.version.wMajor;
  95. pDevCategory->version.wMinor = inner.version.wMinor;
  96. pDevCategory->version.wRevision = inner.version.wRevision;
  97. pDevCategory->version.wBuild = inner.version.wBuild;
  98. }
  99. return result;
  100. }
  101. LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_Reset()
  102. {
  103. if (pDevAdapterInstance == NULL) {
  104. return Error_NotInit;
  105. }
  106. return pDevAdapterInstance->Reset();
  107. }
  108. LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_DevClose()
  109. {
  110. if (pDevAdapterInstance == NULL) {
  111. return Error_NotInit;
  112. }
  113. return pDevAdapterInstance->DevClose();
  114. }
  115. LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_GetLastErr(DevErrorInfo* pDevErrInfo)
  116. {
  117. if (pDevAdapterInstance == NULL) {
  118. strcpy_s(pDevErrInfo->szErrMsg, MAX_DEV_ERROR_MSG_LEN, errInfoInstance.szErrMsg);
  119. pDevErrInfo->dwErrMsgLen = errInfoInstance.dwErrMsgLen;
  120. return Error_Succeed;
  121. }
  122. DevErrorInfo inner;
  123. ErrorCodeEnum result = pDevAdapterInstance->GetLastErr(inner);
  124. if (result == Error_Succeed) {
  125. memset(pDevErrInfo->szErrMsg, 0, sizeof(char) * MAX_DEV_ERROR_MSG_LEN);
  126. strncpy_s(pDevErrInfo->szErrMsg, MAX_DEV_ERROR_MSG_LEN, inner.szErrMsg, strlen(inner.szErrMsg) > MAX_DEV_ERROR_MSG_LEN - 1 ? MAX_DEV_ERROR_MSG_LEN - 1 : strlen(inner.szErrMsg));
  127. pDevErrInfo->dwErrMsgLen = inner.dwErrMsgLen;
  128. }
  129. return result;
  130. }
  131. //////////////////////////////////////////////////////////////////////////
  132. LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_DevOpen()
  133. {
  134. if (pDevAdapterInstance == NULL) {
  135. return Error_NotInit;
  136. }
  137. return pDevAdapterInstance->DevOpen();
  138. }
  139. LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SetParam(int type, int value)
  140. {
  141. if (pDevAdapterInstance == NULL) {
  142. return Error_NotInit;
  143. }
  144. return pDevAdapterInstance->SetParam((ParamType)type, (ParamTypeValue)value);
  145. }
  146. LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SetPreview(short nValue)
  147. {
  148. if (pDevAdapterInstance == NULL) {
  149. return Error_NotInit;
  150. }
  151. return pDevAdapterInstance->SetPreview(nValue);
  152. }
  153. LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_ScanImage(const char* pszFileName)
  154. {
  155. if (pDevAdapterInstance == NULL) {
  156. return Error_NotInit;
  157. }
  158. return pDevAdapterInstance->ScanImage(pszFileName);
  159. }
  160. LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_ScanImageEx(BYTE* pBtImg, int* pBtLen, const char* pszFileName)
  161. {
  162. if (pDevAdapterInstance == NULL) {
  163. return Error_NotInit;
  164. }
  165. int inner = *pBtLen;
  166. ErrorCodeEnum result = pDevAdapterInstance->ScanImageEx(pBtImg, inner, pszFileName);
  167. *pBtLen = inner;
  168. return result;
  169. }
  170. LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SetViewPos(int nX, int nY, int nWidth)
  171. {
  172. if (pDevAdapterInstance == NULL) {
  173. return Error_NotInit;
  174. }
  175. return pDevAdapterInstance->SetViewPos(nX, nY, nWidth);
  176. }
  177. LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SetProperty()
  178. {
  179. if (pDevAdapterInstance == NULL) {
  180. return Error_NotInit;
  181. }
  182. return pDevAdapterInstance->SetProperty();
  183. }
  184. LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_GetDevStatus(Bridge_HspsDevStatus* status)
  185. {
  186. if (pDevAdapterInstance == NULL) {
  187. return Error_NotInit;
  188. }
  189. HspsDevStatus inner;
  190. ErrorCodeEnum result = pDevAdapterInstance->GetDevStatus(inner);
  191. if (result == Error_Succeed) {
  192. status->isConnected = inner.isConnected;
  193. status->inPreview = inner.inPreview;
  194. status->inShow = inner.inShow;
  195. }
  196. return result;
  197. }