usNumber 表示序列号。cUnitID 表示卡带标识符,但不同的供应商有不同的格式来表示它。我在哪里可以找到这种格式?有没有其他地方可以获得逻辑现金单元标识符(类型号)
问问题
752 次
2 回答
2
首先,我不知道你的意思是“不同的格式”。由 wosa/xfs 库定义的usType。下面的定义来自 Xfscdm.h,它们是固定的。
/* values of WFSCDMCASHUNIT.usType */
#define WFS_CDM_TYPENA (1)
#define WFS_CDM_TYPEREJECTCASSETTE (2)
#define WFS_CDM_TYPEBILLCASSETTE (3)
#define WFS_CDM_TYPECOINCYLINDER (4)
#define WFS_CDM_TYPECOINDISPENSER (5)
#define WFS_CDM_TYPERETRACTCASSETTE (6)
#define WFS_CDM_TYPECOUPON (7)
#define WFS_CDM_TYPEDOCUMENT (8)
#define WFS_CDM_TYPEREPCONTAINER (11)
#define WFS_CDM_TYPERECYCLING (12)
无论如何,以下功能可以帮助您获取现金单元信息:
#include "Xfsapi.h"
#include "Xfscdm.h"
HRESULT getCashUnitInfo();
HSERVICE hService;
USHORT cashUnitCount; // Number of Logical Cash Units
LPWFSCDMCASHUNIT cashUnitInfo[6];
int main()
{
if(getCashUnitInfo()==WFS_SUCCESS) {
printf("Get CashUnit Info Failed\n");
return -1;
}
printf("Get Cash Unit Info Success.\n");
return 0;
}
HRESULT getCashUnitInfo()
{
LPWFSRESULT result;
HRESULT r;
r=WFSGetInfo(hService, WFS_INF_CDM_CASH_UNIT_INFO, NULL,20000, &result );
if ( r == WFS_SUCCESS) {
LPWFSCDMCUINFO cuInfo = (LPWFSCDMCUINFO)result->lpBuffer;
cashUnitCount = cuInfo->usCount;
ZF_LOGI("m_CashUnitCount:%d",cashUnitCount);
LPWFSCDMCASHUNIT * lppList = cuInfo->lppList;
for ( int i = 0; i < cuInfo->usCount; ++i ) {
USHORT no = lppList[i]->usNumber -1;
if (cashUnitInfo[no] == NULL)
cashUnitInfo[no] = new WFSCDMCASHUNIT();
//Copy logical Cash Unit info
memcpy(cashUnitInfo[no], lppList[i], sizeof(WFSCDMCASHUNIT) );
printf("m_CashUnitInfo[%d]->bAppLock----------------->%d\n",i,cashUnitInfo[no]->bAppLock);
printf("m_CashUnitInfo[%d]->bDevLock----------------->%d\n",i,cashUnitInfo[no]->bDevLock);
printf("m_CashUnitInfo[%d]->cCurrencyID-------------->%s\n",i,cashUnitInfo[no]->cCurrencyID);
printf("m_CashUnitInfo[%d]->cUnitID------------------>%s\n",i,cashUnitInfo[no]->cUnitID);
printf("m_CashUnitInfo[%d]->lpszCashUnitName--------->%s\n",i,cashUnitInfo[no]->lpszCashUnitName);
printf("m_CashUnitInfo[%d]->ulCount------------------>%ld\n",i,cashUnitInfo[no]->ulCount);
printf("m_CashUnitInfo[%d]->ulInitialCount----------->%ld\n",i,cashUnitInfo[no]->ulInitialCount);
printf("m_CashUnitInfo[%d]->ulMaximum---------------->%ld\n",i,cashUnitInfo[no]->ulMaximum);
printf("m_CashUnitInfo[%d]->ulMinimum---------------->%ld\n",i,cashUnitInfo[no]->ulMinimum);
printf("m_CashUnitInfo[%d]->ulRejectCount------------>%ld\n",i,cashUnitInfo[no]->ulRejectCount);
printf("m_CashUnitInfo[%d]->ulValues----------------->%ld\n",i,cashUnitInfo[no]->ulValues);
printf("m_CashUnitInfo[%d]->usNumber----------------->%hu\n",i,cashUnitInfo[no]->usNumber);
printf("m_CashUnitInfo[%d]->usStatus----------------->%hu\n",i,cashUnitInfo[no]->usStatus);
printf("m_CashUnitInfo[%d]->usType------------------->%hu\n",i,cashUnitInfo[no]->usType);
printf("m_CashUnitInfo[%d]->usNumPhysicalCUs--------->%hu\n",i,cashUnitInfo[no]->usNumPhysicalCUs);
printf("--------------------------------------------------------------------------------------------------\n");
}
}
WFSFreeResult( result );
printf("RESULT:%d\n",r);
return r;
}
于 2019-05-13T08:36:05.190 回答
0
除了建议的答案之外,不要忘记分配足够的内存来打印结果,例如 r = WFMAllocateMore(sizeof(WFSCDMCASHUNIT), result, (void**)&cashUnitInfo[no]);
于 2020-10-12T07:20:59.397 回答