77631527 - 2008-6-24 10:26:00
。。谁能帮下我啊。
suresy - 2008-6-24 22:08:00
帮顶一下,没弄过这东东................
aspx1 - 2008-6-25 6:25:00
我也没接触过类似的东东啊。见笑
zorosuteng - 2008-6-25 8:13:00
读取硬件USB KEY的信息可通过ActiveX控件来完成。
实现:
zorosuteng - 2008-6-25 8:18:00
误操作没写完就回复了 接着来!!!
C#项目的没写过C++的写过,你参照一下吧!或许有些帮助!
实现:
打开Visual Studio.Net 2005,建立一个解决方案或项目USBKey。在项目类型中选择Visual C++下的ATL选项,在模板中选择”ATL Project”,项目名为USBKey。点击确定,系统就在指定的目录下建立了USBKey项目和解决方案。
点击确定后,会出现建立ATL项目向导对话框,引导用户快捷方便的建立ATL项目。点击下一步,进入项目属性设置对话框,可以通过该对话框选择是否属性化和发布方式等。 里面的具体选项和替换的方案我不详细说了,自己琢磨吧!
接口方法:
在USBKey.cpp文件里添加函数GetContent的具体实现过程。核心代码如下:
STDMETHODIMP CUSBKey::GetContent(LONG lFlags, BSTR* pUSBContent)
{
EPAS_STATUS retval;//状态
EPAS_HANDLE epsHandle ; //EPAS句柄
// 创建设备句柄
retval = epas_CreateContext(&epsHandle,0,EPAS_API_VERSION);//调用EPAS的API函数访问USB Key硬件
if (FT_SUCCESS != retval)
{return ReturnError(retval);}//返回相应的错误
// 打开设备
retval = epas_OpenDevice(epsHandle,lFlags,(void *)szAppID);
if (FT_SUCCESS != retval)
{return ReturnError(retval);}
//得到序列号
unsigned long sn[2] = {0};
retval = epas_GetProperty(epsHandle,EPAS_PROP_SERNUM,NULL,sn,sizeof(sn));
if (FT_SUCCESS != retval)
{return ReturnError(retval);}
char m_sn [8*1024+17]={0};
sprintf_s(m_sn, "%08X%08X", sn[1], sn[0]);//以16进制打印到字符串m_sn中
//得到加密字符串
//1、登录
char s[80] = "1234";//登录密码
retval = epas_Verify(epsHandle,EPAS_VERIFY_USER_PIN,(unsigned char*)s,4);
if (FT_SUCCESS != retval){return ReturnError(retval);}
//2、打开文件
EPAS_FILEINFO epsFileInfo = {0};
unsigned long epsFileID = 0x1234;//文件编号
retval = epas_OpenFile(epsHandle,0,epsFileID,&epsFileInfo,sizeof(epsFileInfo));
if (FT_SUCCESS != retval){return ReturnError(retval); }
//3、读取文件内容
unsigned long rLen = 0;
unsigned char rBuff[8*1024] = {0};
ZeroMemory(rBuff,8*1024);
retval = epas_Read(epsHandle,0,0,rBuff,epsFileInfo.ulFileSize,&rLen);
if (FT_SUCCESS != retval){return ReturnError(retval);}
//4、关闭文件
retval = epas_CloseFile(epsHandle);
//关闭设备,删除Context
retval = epas_CloseDevice(epsHandle);
retval = epas_DeleteContext(epsHandle);
strcat_s(m_sn,(char*)rBuff);
*pUSBContent=_com_util::ConvertStringToBSTR((char *)r_sn);
return S_OK;
}
为了能在函数中使用USBKey厂家提供的访问函数和使用BSTR类,需在stdafx.h头文件里面引入相应的.h和.lib文件。如下:
#include "FT_ND_API.h"// ePass1000ND的接口头文件
#include "comutil.h"
#pragma comment(lib, " FT_ND_API.lib")
#pragma comment(lib, "comsuppw.lib")
然后是错误处理 实现IObjectSafety接口测试部署就行了,以前的时候搞过,找的以前的资料不是很全了,关键的部分我已经写出来了。
asp.net - 2008-6-25 9:43:00
强人,佩服,留个记号,以后备用
77631527 - 2008-6-25 14:23:00
..厉害。。谢谢。