资源描述:
《用vc实现usb接口读写数据的程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、用VC++实现USB接LI读写数据的程序2009-08-1511:55用VC++实现USB接口读写数据的程序使川一个GUIDguidIIID_l查找并打幵一个USB设备extern〃C〃intPASCALSearchUSBDevice(){HANDLEhUsb;intnCount,i,j;//标记同一设各个数HDEVINFOhDevInfoSet;BOOLbResult;PSPDEVICE.INTERFACEDETAILDATApDetail=NULL;memset(msysversion,0,20);GetSysVersion(
2、m_sysversion);//检索相关GUID的L*SB设备总设备个数if(!GetUSBListO){return0;}//取得一个该GU1D相关的设备信息集句柄hDevInfoSet=::SetupDiGetClassDevs((LPGUTD)&guidHTD1,//GUTDCLASSUSBDEVTCE,//classGUIDNULL,//无关键字NULL,//不指定父窗口句柄DIGCFPRESENT
3、DIGCF_DEVICEINTERFACE)://目前存在的设备//失败…if(hDevInfoSet==INVALID_H
4、ANDLE_VALUE){returnNULL;//中请设备接口数据空间nCount=0;bResult=TRUE;for(i=0;i〈34;i++){bDeviceOpen■=■FALSE;memset(mDeviceDesc,0,256);SPDEVICEINTERFACEDATAifdata;//设备序号=0,1,2...逐一测试设各接11,到失败为止while(bResult)ifdelta.cbSize=sizeof(ifdata);//枚举符介该GUID的设备接HbResult=::SetupDiEnumDevicei
5、nterfaces(hDevInfoSet,//设备信息集句柄NULL,//不需额外的设备描述(LPGUID)&guidHlD1,//GUIDCLASSUSBDEVICE,//GUJD(ULONG)nCountf//设备信息集里的设备序号&ifdata);//设备接口信息if(bResult){ULONGpredictedLength=0;ULONGrequiredLcngth=0;//取得该设备接口的细节(设备路径)bResult=SetupDiGetinterfaceDeviceDetail(hDevlnfoSet,//设备信
6、息集W柄&ifdataf//设务接H信息NULL,//设备接口细节(设备路径)0,//输出缓冲区大小&requiredLength,//不需计算输出缓冲K大小(白:接用设定位)NULL);//不需额外的设备描述//取得该设各接H的细节(设备路径)predicledLcngth=rcquiredLcnglh;//if(pDetail)//{//pDetail=NULL;//}pDetail=(PSP_INTERFACE_DEVICE_DETAIL_DATA)::GlobalAlloc(LMEM_ZEROINIT,predictedL
7、ength);pDetai卜〉cbSize=sizeof(SPDEVICEINTERFACEDETAILDATA);bResult=SetupDiGetlnterfaceDeviceDetail(hDevlnfoSet,//设各信息銀句柄&ifdata,//设备接口信息pDetail,//设备接口细节(没备路径)predictedLength,//输出缓冲K大小&requiredLength,//不需计算输出缓冲lx:大小(宜接用设定值)NULL);//不需额外的设备描述if(bResult){//货制设备路径到输出缓冲区//::
8、strcpy(pszDevicePath[nCount],pDetail-〉DevicePath);if(strcmp(ni_sysversion,^winnt")==0){charch[18];for(i=0;i〈17;i++){ch=*(pDetail->DevicePath+8+i);}ch[17]= f;if(strcmp(ch,〃vid_0471d_0666〃)==0)//比较版本号,防止点外出错memset(&READ_OS,0,sizeof(OVERLAPPED));memset(miTEOS,0,sizeof(O
9、VERLAPPED));READOS.hEvent=CreateEvcnt(NULL,//nosecurityTRUE,//explicitresetreqFALSE,//initialeventresetNULL)://nonameif(READ