增加twain自定义功能的接口
This commit is contained in:
parent
27d40d543e
commit
c2318606f3
|
@ -14,6 +14,13 @@ HGTwain_CloseDS
|
|||
HGTwain_GetDSName
|
||||
HGTwain_GetDSDeviceName
|
||||
HGTwain_GetDSDeviceCustomInfo
|
||||
HGTwain_LoginDS
|
||||
HGTwain_LogoutDS
|
||||
HGTwain_ClearDSRollerCount
|
||||
HGTwain_GetDSDriverLogPath
|
||||
HGTwain_ClearDSDriverLog
|
||||
HGTwain_GetDSDeviceLogPath
|
||||
HGTwain_ClearDSDeviceLog
|
||||
HGTwain_EnableDSUIOnly
|
||||
HGTwain_EnableDS
|
||||
HGTwain_EnableDSWithSingleScan
|
||||
|
|
|
@ -180,6 +180,83 @@ HGResult HGAPI HGTwain_GetDSDeviceCustomInfo(HGTwainDS ds, HGTwainDeviceCustomIn
|
|||
return twainDSImpl->GetDeviceCustomInfo(info);
|
||||
}
|
||||
|
||||
HGResult HGAPI HGTwain_LoginDS(HGTwainDS ds, const HGChar *user, const HGChar *pwd)
|
||||
{
|
||||
if (NULL == ds)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
||||
HGTwainDSImpl* twainDSImpl = (HGTwainDSImpl*)ds;
|
||||
return twainDSImpl->Login(user, pwd);
|
||||
}
|
||||
|
||||
HGResult HGAPI HGTwain_LogoutDS(HGTwainDS ds)
|
||||
{
|
||||
if (NULL == ds)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
||||
HGTwainDSImpl* twainDSImpl = (HGTwainDSImpl*)ds;
|
||||
return twainDSImpl->Logout();
|
||||
}
|
||||
|
||||
HGResult HGAPI HGTwain_ClearDSRollerCount(HGTwainDS ds)
|
||||
{
|
||||
if (NULL == ds)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
||||
HGTwainDSImpl* twainDSImpl = (HGTwainDSImpl*)ds;
|
||||
return twainDSImpl->ClearRollerCount();
|
||||
}
|
||||
|
||||
HGResult HGAPI HGTwain_GetDSDriverLogPath(HGTwainDS ds, HGChar *path, HGUInt maxLen)
|
||||
{
|
||||
if (NULL == ds)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
||||
HGTwainDSImpl* twainDSImpl = (HGTwainDSImpl*)ds;
|
||||
return twainDSImpl->GetDriverLogPath(path, maxLen);
|
||||
}
|
||||
|
||||
HGResult HGAPI HGTwain_ClearDSDriverLog(HGTwainDS ds)
|
||||
{
|
||||
if (NULL == ds)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
||||
HGTwainDSImpl* twainDSImpl = (HGTwainDSImpl*)ds;
|
||||
return twainDSImpl->ClearDriverLog();
|
||||
}
|
||||
|
||||
HGResult HGAPI HGTwain_GetDSDeviceLogPath(HGTwainDS ds, HGChar *path, HGUInt maxLen)
|
||||
{
|
||||
if (NULL == ds)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
||||
HGTwainDSImpl* twainDSImpl = (HGTwainDSImpl*)ds;
|
||||
return twainDSImpl->GetDeviceLogPath(path, maxLen);
|
||||
}
|
||||
|
||||
HGResult HGAPI HGTwain_ClearDSDeviceLog(HGTwainDS ds)
|
||||
{
|
||||
if (NULL == ds)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
||||
HGTwainDSImpl* twainDSImpl = (HGTwainDSImpl*)ds;
|
||||
return twainDSImpl->ClearDeviceLog();
|
||||
}
|
||||
|
||||
HGResult HGAPI HGTwain_EnableDSUIOnly(HGTwainDS ds, HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam)
|
||||
{
|
||||
if (NULL == ds)
|
||||
|
|
|
@ -15,16 +15,22 @@ HG_DECLARE_HANDLE(HGTwainDS);
|
|||
/* TWAIN设备自定义信息 */
|
||||
typedef struct
|
||||
{
|
||||
HGUShort vid;
|
||||
HGUShort pid;
|
||||
HGChar model[16];
|
||||
HGChar type[16];
|
||||
HGChar sn[32];
|
||||
HGChar fwVer[32];
|
||||
HGChar ip[32];
|
||||
HGChar mac[32];
|
||||
HGUInt rollerCount;
|
||||
HGUInt totalCount;
|
||||
HGInt vid; // VID
|
||||
HGInt pid; // PID
|
||||
HGChar sn[32]; // 设备序列号
|
||||
HGChar type[32]; // 设备型号
|
||||
HGChar fwVer[32]; // 设备固件版本号
|
||||
HGChar ip[32]; // 设备IP
|
||||
HGChar mac[32]; // 设备MAC
|
||||
HGChar driverVer[32]; // 驱动版本号
|
||||
HGChar vendor[32]; // 制造商
|
||||
HGChar copyright[32]; // 版权信息
|
||||
HGChar comUrl[128]; // 公司网址
|
||||
HGChar comTel[32]; // 公司电话
|
||||
HGChar comAddr[256]; // 公司地址
|
||||
HGChar comGps[256]; // 公司地图定位
|
||||
HGInt rollerCount; // 滚轴计数
|
||||
HGInt totalCount; // 历史张数
|
||||
}HGTwainDeviceCustomInfo;
|
||||
|
||||
#pragma pack(pop)
|
||||
|
@ -58,6 +64,20 @@ HGEXPORT HGResult HGAPI HGTwain_GetDSDeviceName(HGTwainDS ds, HGChar* name, HGUI
|
|||
|
||||
HGEXPORT HGResult HGAPI HGTwain_GetDSDeviceCustomInfo(HGTwainDS ds, HGTwainDeviceCustomInfo *info);
|
||||
|
||||
HGEXPORT HGResult HGAPI HGTwain_LoginDS(HGTwainDS ds, const HGChar *user, const HGChar *pwd);
|
||||
|
||||
HGEXPORT HGResult HGAPI HGTwain_LogoutDS(HGTwainDS ds);
|
||||
|
||||
HGEXPORT HGResult HGAPI HGTwain_ClearDSRollerCount(HGTwainDS ds);
|
||||
|
||||
HGEXPORT HGResult HGAPI HGTwain_GetDSDriverLogPath(HGTwainDS ds, HGChar *path, HGUInt maxLen);
|
||||
|
||||
HGEXPORT HGResult HGAPI HGTwain_ClearDSDriverLog(HGTwainDS ds);
|
||||
|
||||
HGEXPORT HGResult HGAPI HGTwain_GetDSDeviceLogPath(HGTwainDS ds, HGChar *path, HGUInt maxLen);
|
||||
|
||||
HGEXPORT HGResult HGAPI HGTwain_ClearDSDeviceLog(HGTwainDS ds);
|
||||
|
||||
HGEXPORT HGResult HGAPI HGTwain_EnableDSUIOnly(HGTwainDS ds, HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam);
|
||||
|
||||
HGEXPORT HGResult HGAPI HGTwain_EnableDS(HGTwainDS ds, HGBool showUI, HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam,
|
||||
|
|
|
@ -404,7 +404,7 @@ HGResult HGTwainDSImpl::GetDeviceName(HGChar* name, HGUInt maxLen)
|
|||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
||||
return HGBASE_ERR_NOTIMPL;
|
||||
return GetCapStr255(0x8854, name, maxLen);
|
||||
}
|
||||
|
||||
HGResult HGTwainDSImpl::GetDeviceCustomInfo(HGTwainDeviceCustomInfo *info)
|
||||
|
@ -416,19 +416,111 @@ HGResult HGTwainDSImpl::GetDeviceCustomInfo(HGTwainDeviceCustomInfo *info)
|
|||
|
||||
memset(info, 0, sizeof(HGTwainDeviceCustomInfo));
|
||||
|
||||
HGChar strValue[256] = {0};
|
||||
GetCap(CAP_SERIALNUMBER, strValue, 256);
|
||||
strcpy(info->sn, strValue);
|
||||
strValue[0] = 0;
|
||||
GetCap(0x8025, strValue, 256);
|
||||
strcpy(info->fwVer, strValue);
|
||||
strValue[0] = 0;
|
||||
GetCap(0x8200, strValue, 256);
|
||||
strcpy(info->ip, strValue);
|
||||
GetCapInt32(0x8852, &info->vid);
|
||||
GetCapInt32(0x8853, &info->pid);
|
||||
GetCapStr255(CAP_SERIALNUMBER, info->sn, 32);
|
||||
GetCapStr255(0x8855, info->type, 32);
|
||||
GetCapStr255(0x8025, info->fwVer, 32);
|
||||
GetCapStr255(0x8200, info->ip, 32);
|
||||
GetCapStr255(0x884A, info->driverVer, 32);
|
||||
GetCapStr255(0x884B, info->vendor, 32);
|
||||
GetCapStr255(0x884C, info->copyright, 32);
|
||||
GetCapStr255(0x884D, info->comUrl, 128);
|
||||
GetCapStr255(0x884E, info->comTel, 32);
|
||||
GetCapStr255(0x884F, info->comAddr, 256);
|
||||
GetCapStr255(0x8850, info->comGps, 256);
|
||||
GetCapInt32(0x9902, &info->rollerCount);
|
||||
GetCapInt32(0x8849, &info->totalCount);
|
||||
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
struct LoginType
|
||||
{
|
||||
TW_UINT16 ItemType;
|
||||
TW_UINT32 NumItems;
|
||||
TW_STR32 Value[2];
|
||||
};
|
||||
|
||||
HGResult HGTwainDSImpl::Login(const HGChar *user, const HGChar *pwd)
|
||||
{
|
||||
if (NULL == user || strlen(user) >= sizeof(TW_STR32)
|
||||
|| NULL == pwd || strlen(pwd) >= sizeof(TW_STR32))
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
||||
TW_CAPABILITY twCap;
|
||||
twCap.Cap = (TW_UINT16)0x9900;
|
||||
twCap.ConType = TWON_ARRAY;
|
||||
twCap.hContainer = GlobalAlloc(GHND, sizeof(LoginType));
|
||||
if (NULL == twCap.hContainer)
|
||||
{
|
||||
return HGBASE_ERR_FAIL;
|
||||
}
|
||||
|
||||
LoginType *pVal = (LoginType *)GlobalLock(twCap.hContainer);
|
||||
assert(NULL != pVal);
|
||||
pVal->ItemType = TWTY_STR32;
|
||||
pVal->NumItems = 2;
|
||||
strcpy(pVal->Value[0], user);
|
||||
strcpy(pVal->Value[1], pwd);
|
||||
GlobalUnlock(twCap.hContainer);
|
||||
|
||||
USHORT ret = m_dsmImpl->m_pDSMProc(&m_dsmImpl->m_AppId, &m_iden, DG_CONTROL, DAT_CAPABILITY, MSG_SET, &twCap);
|
||||
GlobalFree(twCap.hContainer);
|
||||
return (TWRC_SUCCESS == ret) ? HGBASE_ERR_OK : HGTWAIN_ERR_FAIL;
|
||||
}
|
||||
|
||||
HGResult HGTwainDSImpl::Logout()
|
||||
{
|
||||
TW_CAPABILITY twCap;
|
||||
twCap.Cap = (TW_UINT16)0x9901;
|
||||
twCap.ConType = TWON_ARRAY;
|
||||
twCap.hContainer = GlobalAlloc(GHND, sizeof(LoginType));
|
||||
if (NULL == twCap.hContainer)
|
||||
{
|
||||
return HGBASE_ERR_FAIL;
|
||||
}
|
||||
|
||||
LoginType *pVal = (LoginType *)GlobalLock(twCap.hContainer);
|
||||
assert(NULL != pVal);
|
||||
pVal->ItemType = TWTY_STR32;
|
||||
pVal->NumItems = 2;
|
||||
memset(pVal->Value[0], 0, sizeof(pVal->Value[0]));
|
||||
memset(pVal->Value[0], 0, sizeof(pVal->Value[1]));
|
||||
GlobalUnlock(twCap.hContainer);
|
||||
|
||||
USHORT ret = m_dsmImpl->m_pDSMProc(&m_dsmImpl->m_AppId, &m_iden, DG_CONTROL, DAT_CAPABILITY, MSG_SET, &twCap);
|
||||
GlobalFree(twCap.hContainer);
|
||||
return (TWRC_SUCCESS == ret) ? HGBASE_ERR_OK : HGTWAIN_ERR_FAIL;
|
||||
}
|
||||
|
||||
HGResult HGTwainDSImpl::ClearRollerCount()
|
||||
{
|
||||
return ResetCapInt32(0x9902);
|
||||
}
|
||||
|
||||
HGResult HGTwainDSImpl::GetDriverLogPath(HGChar *path, HGUInt maxLen)
|
||||
{
|
||||
return GetCapStr255(0x9903, path, maxLen);
|
||||
}
|
||||
|
||||
HGResult HGTwainDSImpl::ClearDriverLog()
|
||||
{
|
||||
return ResetCapStr255(0x9903);
|
||||
}
|
||||
|
||||
HGResult HGTwainDSImpl::GetDeviceLogPath(HGChar *path, HGUInt maxLen)
|
||||
{
|
||||
return GetCapStr255(0x9904, path, maxLen);
|
||||
}
|
||||
|
||||
HGResult HGTwainDSImpl::ClearDeviceLog()
|
||||
{
|
||||
return ResetCapStr255(0x9904);
|
||||
}
|
||||
|
||||
HGResult HGTwainDSImpl::EnableUIOnly(HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam)
|
||||
{
|
||||
TW_USERINTERFACE twUI;
|
||||
|
@ -474,13 +566,13 @@ HGResult HGTwainDSImpl::EnableWithSingleScan(HGDSCloseReqFunc eventFunc, HGPoint
|
|||
HGDSImageFunc imageFunc, HGPointer imageParam)
|
||||
{
|
||||
HGInt oldXferCount = -1;
|
||||
HGResult ret = GetCap(CAP_XFERCOUNT, &oldXferCount);
|
||||
HGResult ret = GetCapInt32(CAP_XFERCOUNT, &oldXferCount);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = SetCap(CAP_XFERCOUNT, 1);
|
||||
ret = SetCapInt32(CAP_XFERCOUNT, 1);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
return ret;
|
||||
|
@ -514,7 +606,7 @@ HGResult HGTwainDSImpl::Disable()
|
|||
|
||||
if (m_singleScan)
|
||||
{
|
||||
SetCap(CAP_XFERCOUNT, m_oldXferCount);
|
||||
SetCapInt32(CAP_XFERCOUNT, m_oldXferCount);
|
||||
}
|
||||
|
||||
m_singleScan = FALSE;
|
||||
|
@ -528,35 +620,57 @@ HGResult HGTwainDSImpl::Disable()
|
|||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
HGResult HGTwainDSImpl::SetCap(HGUInt cap, HGInt value)
|
||||
struct CapInt32Type
|
||||
{
|
||||
TW_UINT16 ItemType;
|
||||
TW_INT32 Value;
|
||||
};
|
||||
|
||||
HGResult HGTwainDSImpl::SetCapInt32(HGUInt cap, HGInt value)
|
||||
{
|
||||
TW_CAPABILITY twCap;
|
||||
twCap.Cap = (TW_UINT16)cap;
|
||||
twCap.ConType = TWON_ONEVALUE;
|
||||
twCap.hContainer = GlobalAlloc(GHND, sizeof(TW_ONEVALUE));
|
||||
twCap.hContainer = GlobalAlloc(GHND, sizeof(CapInt32Type));
|
||||
if (NULL == twCap.hContainer)
|
||||
{
|
||||
return HGBASE_ERR_FAIL;
|
||||
}
|
||||
|
||||
pTW_ONEVALUE pVal = (pTW_ONEVALUE)GlobalLock(twCap.hContainer);
|
||||
CapInt32Type* pVal = (CapInt32Type*)GlobalLock(twCap.hContainer);
|
||||
assert(NULL != pVal);
|
||||
pVal->ItemType = TWTY_INT32;
|
||||
pVal->Item = (TW_UINT32)value;
|
||||
pVal->Value = value;
|
||||
GlobalUnlock(twCap.hContainer);
|
||||
|
||||
USHORT ret = m_dsmImpl->m_pDSMProc(&m_dsmImpl->m_AppId, &m_iden, DG_CONTROL, DAT_CAPABILITY, MSG_SET, &twCap);
|
||||
if (TWRC_SUCCESS != ret)
|
||||
{
|
||||
GlobalFree(twCap.hContainer);
|
||||
return HGTWAIN_ERR_FAIL;
|
||||
}
|
||||
|
||||
GlobalFree(twCap.hContainer);
|
||||
return HGBASE_ERR_OK;
|
||||
GlobalFree(twCap.hContainer);
|
||||
return (TWRC_SUCCESS == ret) ? HGBASE_ERR_OK : HGTWAIN_ERR_FAIL;
|
||||
}
|
||||
|
||||
HGResult HGTwainDSImpl::GetCap(HGUInt cap, HGInt* value)
|
||||
HGResult HGTwainDSImpl::ResetCapInt32(HGUInt cap)
|
||||
{
|
||||
TW_CAPABILITY twCap;
|
||||
twCap.Cap = (TW_UINT16)cap;
|
||||
twCap.ConType = TWON_ONEVALUE;
|
||||
twCap.hContainer = GlobalAlloc(GHND, sizeof(CapInt32Type));
|
||||
if (NULL == twCap.hContainer)
|
||||
{
|
||||
return HGBASE_ERR_FAIL;
|
||||
}
|
||||
|
||||
CapInt32Type* pVal = (CapInt32Type*)GlobalLock(twCap.hContainer);
|
||||
assert(NULL != pVal);
|
||||
pVal->ItemType = TWTY_INT32;
|
||||
pVal->Value = 0;
|
||||
GlobalUnlock(twCap.hContainer);
|
||||
|
||||
USHORT ret = m_dsmImpl->m_pDSMProc(&m_dsmImpl->m_AppId, &m_iden, DG_CONTROL, DAT_CAPABILITY, MSG_RESET, &twCap);
|
||||
GlobalFree(twCap.hContainer);
|
||||
return (TWRC_SUCCESS == ret) ? HGBASE_ERR_OK : HGTWAIN_ERR_FAIL;
|
||||
}
|
||||
|
||||
HGResult HGTwainDSImpl::GetCapInt32(HGUInt cap, HGInt* value)
|
||||
{
|
||||
if (NULL == value)
|
||||
{
|
||||
|
@ -567,24 +681,81 @@ HGResult HGTwainDSImpl::GetCap(HGUInt cap, HGInt* value)
|
|||
twCap.Cap = (TW_UINT16)cap;
|
||||
twCap.ConType = TWON_ONEVALUE;
|
||||
twCap.hContainer = NULL;
|
||||
|
||||
USHORT ret = m_dsmImpl->m_pDSMProc(&m_dsmImpl->m_AppId, &m_iden, DG_CONTROL, DAT_CAPABILITY, MSG_GETCURRENT, &twCap);
|
||||
if (TWRC_SUCCESS != ret)
|
||||
if (TWRC_SUCCESS != m_dsmImpl->m_pDSMProc(&m_dsmImpl->m_AppId, &m_iden, DG_CONTROL, DAT_CAPABILITY, MSG_GETCURRENT, &twCap))
|
||||
{
|
||||
return HGTWAIN_ERR_FAIL;
|
||||
}
|
||||
|
||||
HGResult ret = HGBASE_ERR_FAIL;
|
||||
assert(NULL != twCap.hContainer);
|
||||
pTW_ONEVALUE pVal = (pTW_ONEVALUE)GlobalLock(twCap.hContainer);
|
||||
assert(NULL != pVal);
|
||||
*value = pVal->Item;
|
||||
CapInt32Type* pVal = (CapInt32Type*)GlobalLock(twCap.hContainer);
|
||||
if (NULL != pVal && pVal->ItemType == TWTY_INT32)
|
||||
{
|
||||
*value = pVal->Value;
|
||||
ret = HGBASE_ERR_OK;
|
||||
}
|
||||
GlobalUnlock(twCap.hContainer);
|
||||
|
||||
GlobalFree(twCap.hContainer);
|
||||
return HGBASE_ERR_OK;
|
||||
return ret;
|
||||
}
|
||||
|
||||
HGResult HGTwainDSImpl::GetCap(HGUInt cap, HGChar *value, HGUInt maxLen)
|
||||
struct CapStr255Type
|
||||
{
|
||||
TW_UINT16 ItemType;
|
||||
TW_STR255 Value;
|
||||
};
|
||||
|
||||
HGResult HGTwainDSImpl::SetCapStr255(HGUInt cap, const HGChar *value)
|
||||
{
|
||||
if (NULL == value || strlen(value) >= sizeof(TWTY_STR255))
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
||||
TW_CAPABILITY twCap;
|
||||
twCap.Cap = (TW_UINT16)cap;
|
||||
twCap.ConType = TWON_ONEVALUE;
|
||||
twCap.hContainer = GlobalAlloc(GHND, sizeof(CapStr255Type));
|
||||
if (NULL == twCap.hContainer)
|
||||
{
|
||||
return HGBASE_ERR_FAIL;
|
||||
}
|
||||
|
||||
CapStr255Type* pVal = (CapStr255Type*)GlobalLock(twCap.hContainer);
|
||||
assert(NULL != pVal);
|
||||
pVal->ItemType = TWTY_STR255;
|
||||
strcpy(pVal->Value, value);
|
||||
GlobalUnlock(twCap.hContainer);
|
||||
|
||||
USHORT ret = m_dsmImpl->m_pDSMProc(&m_dsmImpl->m_AppId, &m_iden, DG_CONTROL, DAT_CAPABILITY, MSG_SET, &twCap);
|
||||
GlobalFree(twCap.hContainer);
|
||||
return (TWRC_SUCCESS == ret) ? HGBASE_ERR_OK : HGTWAIN_ERR_FAIL;
|
||||
}
|
||||
|
||||
HGResult HGTwainDSImpl::ResetCapStr255(HGUInt cap)
|
||||
{
|
||||
TW_CAPABILITY twCap;
|
||||
twCap.Cap = (TW_UINT16)cap;
|
||||
twCap.ConType = TWON_ONEVALUE;
|
||||
twCap.hContainer = GlobalAlloc(GHND, sizeof(CapStr255Type));
|
||||
if (NULL == twCap.hContainer)
|
||||
{
|
||||
return HGBASE_ERR_FAIL;
|
||||
}
|
||||
|
||||
CapStr255Type* pVal = (CapStr255Type*)GlobalLock(twCap.hContainer);
|
||||
assert(NULL != pVal);
|
||||
pVal->ItemType = TWTY_STR255;
|
||||
memset(pVal->Value, 0, sizeof(pVal->Value));
|
||||
GlobalUnlock(twCap.hContainer);
|
||||
|
||||
USHORT ret = m_dsmImpl->m_pDSMProc(&m_dsmImpl->m_AppId, &m_iden, DG_CONTROL, DAT_CAPABILITY, MSG_RESET, &twCap);
|
||||
GlobalFree(twCap.hContainer);
|
||||
return (TWRC_SUCCESS == ret) ? HGBASE_ERR_OK : HGTWAIN_ERR_FAIL;
|
||||
}
|
||||
|
||||
HGResult HGTwainDSImpl::GetCapStr255(HGUInt cap, HGChar *value, HGUInt maxLen)
|
||||
{
|
||||
if (NULL == value || 0 == maxLen)
|
||||
{
|
||||
|
@ -595,21 +766,25 @@ HGResult HGTwainDSImpl::GetCap(HGUInt cap, HGChar *value, HGUInt maxLen)
|
|||
twCap.Cap = (TW_UINT16)cap;
|
||||
twCap.ConType = TWON_ONEVALUE;
|
||||
twCap.hContainer = NULL;
|
||||
|
||||
USHORT rc = m_dsmImpl->m_pDSMProc(&m_dsmImpl->m_AppId, &m_iden, DG_CONTROL, DAT_CAPABILITY, MSG_GETCURRENT, &twCap);
|
||||
if (TWRC_SUCCESS != rc)
|
||||
if (TWRC_SUCCESS != m_dsmImpl->m_pDSMProc(&m_dsmImpl->m_AppId, &m_iden, DG_CONTROL, DAT_CAPABILITY, MSG_GETCURRENT, &twCap))
|
||||
{
|
||||
return HGTWAIN_ERR_FAIL;
|
||||
}
|
||||
|
||||
HGResult ret = HGBASE_ERR_INVALIDARG;
|
||||
HGResult ret = HGBASE_ERR_FAIL;
|
||||
assert(NULL != twCap.hContainer);
|
||||
pTW_ONEVALUE pVal = (pTW_ONEVALUE)GlobalLock(twCap.hContainer);
|
||||
assert(NULL != pVal);
|
||||
if (maxLen > strlen((char *)&pVal->Item))
|
||||
CapStr255Type* pVal = (CapStr255Type*)GlobalLock(twCap.hContainer);
|
||||
if (NULL != pVal && pVal->ItemType == TWTY_STR255)
|
||||
{
|
||||
strcpy(value, (char *)&pVal->Item);
|
||||
ret = HGBASE_ERR_OK;
|
||||
if (maxLen > strlen(pVal->Value))
|
||||
{
|
||||
strcpy(value, pVal->Value);
|
||||
ret = HGBASE_ERR_OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
}
|
||||
GlobalUnlock(twCap.hContainer);
|
||||
|
||||
|
|
|
@ -52,7 +52,16 @@ public:
|
|||
HGResult Close();
|
||||
HGResult GetName(HGChar* name, HGUInt maxLen);
|
||||
HGResult GetDeviceName(HGChar* name, HGUInt maxLen);
|
||||
|
||||
HGResult GetDeviceCustomInfo(HGTwainDeviceCustomInfo *info);
|
||||
HGResult Login(const HGChar *user, const HGChar *pwd);
|
||||
HGResult Logout();
|
||||
HGResult ClearRollerCount();
|
||||
HGResult GetDriverLogPath(HGChar *path, HGUInt maxLen);
|
||||
HGResult ClearDriverLog();
|
||||
HGResult GetDeviceLogPath(HGChar *path, HGUInt maxLen);
|
||||
HGResult ClearDeviceLog();
|
||||
|
||||
HGResult EnableUIOnly(HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam);
|
||||
HGResult Enable(HGBool showUI, HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam,
|
||||
HGDSImageFunc imageFunc, HGPointer imageParam);
|
||||
|
@ -61,9 +70,12 @@ public:
|
|||
HGResult Disable();
|
||||
|
||||
private:
|
||||
HGResult SetCap(HGUInt cap, HGInt value);
|
||||
HGResult GetCap(HGUInt cap, HGInt* value);
|
||||
HGResult GetCap(HGUInt cap, HGChar *value, HGUInt maxLen);
|
||||
HGResult SetCapInt32(HGUInt cap, HGInt value);
|
||||
HGResult ResetCapInt32(HGUInt cap);
|
||||
HGResult GetCapInt32(HGUInt cap, HGInt* value);
|
||||
HGResult SetCapStr255(HGUInt cap, const HGChar *value);
|
||||
HGResult ResetCapStr255(HGUInt cap);
|
||||
HGResult GetCapStr255(HGUInt cap, HGChar *value, HGUInt maxLen);
|
||||
HGResult ImageNativeXfer(HGUInt type, HGUInt origin, HGImage* image);
|
||||
HGResult EndXfer(HGUInt* count);
|
||||
HGResult Reset();
|
||||
|
|
Loading…
Reference in New Issue