阅读:4121回复:15
SetupDiGetInterfaceDeviceDetail怎么老是出错?
HANDLE OpenOneDevice (HDEVINFO HardwareDeviceInfo,
PSP_INTERFACE_DEVICE_DATA DeviceInfoData,char *devName) { PSP_INTERFACE_DEVICE_DETAIL_DATA functionClassDeviceData = NULL; ULONG predictedLength = 0; ULONG requiredLength = 0; HANDLE hOut = INVALID_HANDLE_VALUE; int my_error; SetupDiGetInterfaceDeviceDetail (HardwareDeviceInfo,DeviceInfoData,NULL,0,&requiredLength,NULL); predictedLength = requiredLength;// sizeof (SP_FNCLASS_DEVICE_DATA) + 512; functionClassDeviceData = (PSP_INTERFACE_DEVICE_DETAIL_DATA)malloc (predictedLength); functionClassDeviceData->cbSize = sizeof (SP_INTERFACE_DEVICE_DETAIL_DATA); // // Retrieve the information from Plug and Play. //怎么老是这里出错,报1784 if (! SetupDiGetInterfaceDeviceDetail ( HardwareDeviceInfo, DeviceInfoData, functionClassDeviceData, predictedLength, &requiredLength, NULL)) { my_error = GetLastError(); return INVALID_HANDLE_VALUE; } strcpy( devName,functionClassDeviceData->DevicePath) ; hOut = CreateFile ( functionClassDeviceData->DevicePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (INVALID_HANDLE_VALUE == hOut) { } free(functionClassDeviceData); return hOut; } 我用bcb写的,怎么老是在第二次SetupDiGetInterfaceDeviceDetail 是出错啊?报1784,怎么回事啊? |
|
沙发#
发布于:2004-09-23 13:03
1784=提供给请求操作的用户缓冲区无效。
|
|
|
板凳#
发布于:2004-09-23 14:48
问题 是为什么出现这个错啊
|
|
地板#
发布于:2004-09-23 16:59
查找以前的帖子,以前有个哥们遇到过这种问题
好像VC可以正常运行,BC就出这个问题 |
|
|
地下室#
发布于:2004-09-24 08:14
就是,我看到他的帖子了,也没下文啊
|
|
5楼#
发布于:2004-09-24 09:23
不清楚.
不要给我发密语,我不知道怎么看密语. 晕. |
|
|
6楼#
发布于:2004-09-24 09:24
进来顶就散分,小弟苦思了好久了
|
|
7楼#
发布于:2004-09-24 09:28
你不是发过类似的帖子吗?不知道解决没有
|
|
8楼#
发布于:2004-09-24 11:20
把 functionClassDeviceData->cbSize = sizeof (SP_INTERFACE_DEVICE_DETAIL_DATA);改成 functionClassDeviceData->cbSize = requiredLength;试验一下,
如果没有问题,那么就是版本兼容的问题了 :cool: |
|
9楼#
发布于:2004-09-24 12:59
还不对啊,是什么版本兼容啊?
|
|
10楼#
发布于:2004-09-24 15:56
是不是还要设置环境? 唉...没人用bcb吗?
|
|
11楼#
发布于:2004-09-27 13:37
我现在用的是xpddk/2600,应该没问题吧?是不是要设置环境啊,怎么没人回答????
|
|
12楼#
发布于:2004-09-30 14:17
真的没人知道吗?很失望
-------------------------------- 过完节后,一律给分(参与就有分) |
|
13楼#
发布于:2004-10-01 18:29
Project->Option->Advanced complier->Data Alignment->Byte
Try it.. :P |
|
14楼#
发布于:2004-10-01 23:09
我的代码,好用的:
BOOL CUsbMifareAgent::Open(UINT unIndex, CString &strErr) { Close(); DWORD dwErr; DWORD flags = DIGCF_DEVICEINTERFACE | DIGCF_PRESENT ; HANDLE hInfo; hInfo = SetupDiGetClassDevs(&m_ReaderGuid, NULL, NULL, flags); if(hInfo == INVALID_HANDLE_VALUE) { strErr.Format(_T("Failed to call SetupDiGetClassDevs, Error=%u"), GetLastError()); if(IDYES == MessageBox(NULL, _T("系统中没有安装相应的读卡器, 是否退出应用程序?"), NULL, MB_YESNO)) { ::ExitProcess(74); } return FALSE; } SP_DEVICE_INTERFACE_DATA InterfaceData; InterfaceData.cbSize = sizeof SP_DEVICE_INTERFACE_DATA; PSP_INTERFACE_DEVICE_DETAIL_DATA pInterfaceDetailData; if(!SetupDiEnumDeviceInterfaces(hInfo, NULL, &m_ReaderGuid, unIndex, &InterfaceData)) { strErr.Format(_T("Failed to call SetupDiEnumDeviceInterfaces, Error=%u"), GetLastError()); if(IDYES == MessageBox(NULL, _T("指定的读卡器没有插入USB插口,或该读写器已经休眠,是否退出应用程序?"), NULL, MB_YESNO)) { ::ExitProcess(74); } AfxMessageBox(_T("指定的读卡器没有插入USB插口,或该读写器已经休眠,请将之重新插入!")); return FALSE; } DWORD ReqLen; SetupDiGetInterfaceDeviceDetail(hInfo, &InterfaceData, NULL, 0, &ReqLen, NULL); dwErr = GetLastError(); if(dwErr != ERROR_INSUFFICIENT_BUFFER) { strErr.Format(_T("Failed to call SetupDiGetInterfaceDeviceDetail, Error=%u"), dwErr); AfxMessageBox(strErr); return FALSE; } pInterfaceDetailData = PSP_INTERFACE_DEVICE_DETAIL_DATA(new TCHAR[ReqLen]); if(NULL == pInterfaceDetailData) { strErr = _T("Insufficient memory!"); AfxMessageBox(strErr); return FALSE; } pInterfaceDetailData->cbSize = sizeof SP_INTERFACE_DEVICE_DETAIL_DATA; if(!SetupDiGetInterfaceDeviceDetail(hInfo, &InterfaceData, pInterfaceDetailData, ReqLen, &ReqLen, NULL)) { strErr.Format(_T("Failed to call SetupDiGetInterfaceDeviceDetail, Error=%u"), GetLastError()); delete [] pInterfaceDetailData; AfxMessageBox(strErr); return FALSE; } HANDLE hDev = CreateFile( pInterfaceDetailData->DevicePath, GENERIC_READ | GENERIC_WRITE, 0/*FILE_SHARE_READ | FILE_SHARE_WRITE*/, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL ); delete[] pInterfaceDetailData; if (hDev == INVALID_HANDLE_VALUE) { strErr.Format(_T("Failed to open device, Erro=%u"), GetLastError()); AfxMessageBox(_T("无法打开指定的读写器,请重新拔插读写器并重试本操作!")); return FALSE; } strErr.Empty(); m_hReader = hDev; return TRUE; } |
|
|
15楼#
发布于:2004-10-09 10:16
好可以了,为什么现在不能给分啊,老说没登录
|
|