请高手指点使用USB接口IC卡读卡器的API 本人新接触windows 提供得Smart card API函数,使用SCardListReaders时,总是出错。请问有否高人可以指点一二。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我以前做过不少USB设备及无线射频卡的读写,你最好把你的问题代码发上来,大家一起帮你研究。 我想将代码上传,但又不知如何操作!不如我文字叙述一下问题吧。1。将Smart card 服务打开的时候,使用SCardEstablishContext是成功的,但获取不了读卡器的列表。更不用说连接了;2。若将Smart card 服务关闭,则SCardEstablishContext调用不成功,但SCardListReaders产生了列表,客列表中没有我所希望的读卡器名称;我不明白为什么会出现这种情况,请指点指点!其中部分代码如下:LONG ListReaders ( IN SCARDCONTEXT hContext, IN LPCTSTR lpmszReaderGroups ) { LONG lResult; DWORD dwNumReaders = 0; LPTSTR lpmszReaderNames; LPTSTR lpszReaderName; lResult = SCListReaders ( hContext, lpmszReaderGroups, (LPTSTR *) &lpmszReaderNames ); if ( lResult != SCARD_S_SUCCESS ) { printf ( ("\n#5. Error [0x%lx]: Program terminated abnormally.\n"), lResult ); return ( lResult ); } lpszReaderName = lpmszReaderNames; printf(("\n")); printf(("** Registered Reader(s)\n")); printf(("====================\n")); while ( *lpszReaderName != ('\0') ) { printf ( ("%02d: %s\n"), ++dwNumReaders, lpszReaderName ); lpszReaderName += lstrlen(lpszReaderName) + 1; } if ( dwNumReaders == 0 ) { printf( ( "No registered reader was found for the specified(reader group(s) [%s].\n)"), lpmszReaderGroups ); } if ( lpmszReaderNames != NULL) { lResult = SCFree ( (LPVOID) lpmszReaderNames ); } return lResult;}LONG SCListReaders (IN SCARDCONTEXT hContext, IN LPCTSTR lpmszReaderGroups, OUT LPTSTR * lplpmszReaderNames){ LONG lResult; DWORD dwReaders; assert(lplpmszReaderNames != NULL); lResult = SCardListReaders(hContext, lpmszReaderGroups, NULL, // NULL to indicate we want to &dwReaders); // know the length of the buffer if (lResult != SCARD_S_SUCCESS) { return lResult; } LPTSTR lpmszReaderNames = (LPTSTR) SCMalloc(dwReaders * sizeof(_TCHAR)); if (lpmszReaderNames == NULL) { return ERROR_OUTOFMEMORY; } lResult = SCardListReaders(hContext, lpmszReaderGroups, lpmszReaderNames, &dwReaders); if (lResult == SCARD_S_SUCCESS) { // // Successful, so return pointer to reader names. // *lplpmszReaderNames = lpmszReaderNames; } else { SCFree((LPVOID) lpmszReaderNames); } return lResult;}LONG SCFree (IN LPVOID lpMemory){ LONG lResult; assert(lpMemory != NULL); if (HeapFree(GetProcessHeap(), 0, lpMemory)) { lResult = SCARD_S_SUCCESS; } else { lResult = GetLastError(); } return lResult;} SQL Server多个连接时,数据同步的问题 求助:谁能给小弟解释下 m_pSlotData[nSlot].dwFlag & SLOT_USED 这条语句啥意思?? 关于MFC基类继承的一个问题 问两个控制其它进程的问题. 各位高手,dc转换为bmp问题没有解决:需求发生变更 为什么老有这样的错误? 菜鸟发问,(在线给分) gridctrl的困惑 学计算机的有必要读博士吗? 各位大虾请帮帮我好吗???哪里可以下载如下书的代码。。。 谁能给一个真正能发邮件的类(用smtp实现的) 怎样把数据保存进磁盘,并能重新打开。
不如我文字叙述一下问题吧。
1。将Smart card 服务打开的时候,使用SCardEstablishContext是成功的,但获取不了读卡器的列表。更不用说连接了;
2。若将Smart card 服务关闭,则SCardEstablishContext调用不成功,但SCardListReaders产生了列表,客列表中没有我所希望的读卡器名称;我不明白为什么会出现这种情况,请指点指点!其中部分代码如下:
LONG ListReaders ( IN SCARDCONTEXT hContext,
IN LPCTSTR lpmszReaderGroups )
{
LONG lResult;
DWORD dwNumReaders = 0;
LPTSTR lpmszReaderNames;
LPTSTR lpszReaderName;
lResult = SCListReaders ( hContext, lpmszReaderGroups, (LPTSTR *) &lpmszReaderNames );
if ( lResult != SCARD_S_SUCCESS )
{
printf ( ("\n#5. Error [0x%lx]: Program terminated abnormally.\n"),
lResult );
return ( lResult );
} lpszReaderName = lpmszReaderNames; printf(("\n"));
printf(("** Registered Reader(s)\n"));
printf(("====================\n")); while ( *lpszReaderName != ('\0') )
{
printf ( ("%02d: %s\n"), ++dwNumReaders, lpszReaderName );
lpszReaderName += lstrlen(lpszReaderName) + 1;
} if ( dwNumReaders == 0 )
{
printf( ( "No registered reader was found for the specified(reader group(s) [%s].\n)"), lpmszReaderGroups );
}
if ( lpmszReaderNames != NULL)
{
lResult = SCFree ( (LPVOID) lpmszReaderNames );
} return lResult;
}
LONG SCListReaders (IN SCARDCONTEXT hContext,
IN LPCTSTR lpmszReaderGroups,
OUT LPTSTR * lplpmszReaderNames)
{
LONG lResult;
DWORD dwReaders;
assert(lplpmszReaderNames != NULL);
lResult = SCardListReaders(hContext,
lpmszReaderGroups,
NULL, // NULL to indicate we want to
&dwReaders); // know the length of the buffer
if (lResult != SCARD_S_SUCCESS)
{
return lResult;
} LPTSTR lpmszReaderNames = (LPTSTR) SCMalloc(dwReaders * sizeof(_TCHAR)); if (lpmszReaderNames == NULL)
{
return ERROR_OUTOFMEMORY;
} lResult = SCardListReaders(hContext,
lpmszReaderGroups,
lpmszReaderNames,
&dwReaders);
if (lResult == SCARD_S_SUCCESS)
{
//
// Successful, so return pointer to reader names.
//
*lplpmszReaderNames = lpmszReaderNames;
}
else
{
SCFree((LPVOID) lpmszReaderNames);
} return lResult;
}
LONG SCFree (IN LPVOID lpMemory)
{
LONG lResult;
assert(lpMemory != NULL); if (HeapFree(GetProcessHeap(), 0, lpMemory))
{
lResult = SCARD_S_SUCCESS;
}
else
{
lResult = GetLastError();
} return lResult;
}