阅读:2353回复:11
请问usb应用程序的问题!!
请问在bcb中写usb应用程序,在vc中可以运行很好控制设备的函数,在bcb中就不能控制设备了,驱动应该没有什么问题>,
运行得到SetupDiGetClassDevs,就没有执行了,在vc++可以完全运行打开设备!请问高手解答,不甚感激 ///////////////////////////////////////////////////////////////////////////// // GetDeviceViaInterface: Open a handle via a device interface HANDLE GetDeviceViaInterface( GUID* pGuid, DWORD instance) { // Get handle to relevant device information set HDEVINFO info = SetupDiGetClassDevs(pGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE); if(info==INVALID_HANDLE_VALUE) { printf(\"No HDEVINFO available for this GUID\\n\"); return NULL; } printf (\"SetupDiGetClassDevs\\n\"); // Get interface data for the requested instance SP_INTERFACE_DEVICE_DATA ifdata; ifdata.cbSize = sizeof(ifdata); if(!SetupDiEnumDeviceInterfaces(info, NULL, pGuid, instance, &ifdata)) { printf(\"No SP_INTERFACE_DEVICE_DATA available for this GUID instance\\n\"); SetupDiDestroyDeviceInfoList(info); return NULL; } printf (\"SetupDiEnumDeviceInterfaces\\n\"); // Get size of symbolic link name DWORD ReqLen; SetupDiGetDeviceInterfaceDetail(info, &ifdata, NULL, 0, &ReqLen, NULL); PSP_INTERFACE_DEVICE_DETAIL_DATA ifDetail = (PSP_INTERFACE_DEVICE_DETAIL_DATA)(new char[ReqLen]); if( ifDetail==NULL) { SetupDiDestroyDeviceInfoList(info); return NULL; } printf (\"SetupDiEnumDeviceInterfaces\\n\"); // Get symbolic link name ifDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA); printf(\"1\\n\"); if( !SetupDiGetDeviceInterfaceDetail(info, &ifdata, ifDetail, ReqLen, NULL, NULL)) { SetupDiDestroyDeviceInfoList(info); delete ifDetail; return NULL; } printf (\"SetupDiEnumDevice\\n\"); printf(\"Symbolic link is %s\\n\",ifDetail->DevicePath); // Open file HANDLE rv = CreateFile( ifDetail->DevicePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if( rv==INVALID_HANDLE_VALUE) rv = NULL; delete ifDetail; SetupDiDestroyDeviceInfoList(info); return rv; } |
|
|
沙发#
发布于:2003-05-08 10:24
高手指点一下啊,给多多的分!!!1
|
|
|
板凳#
发布于:2003-05-08 10:40
我也对这个问题很感兴趣,各位大侠给点指点啊!
|
|
地板#
发布于:2003-05-08 10:47
是否有可能,从不bcb和vc关于参数的定义有所不同!
|
|
地下室#
发布于:2003-05-09 19:34
我的在VC中也出现这种问题,这是为什么?
|
|
5楼#
发布于:2003-05-12 14:33
这个打开设备函数在vc运行很好,如果你出错的话,估计是环境设置有误!我就这一个函数就可以在vc中控制打开设备但在bcb中就失败!唉,郁闷! :( :(
|
|
|
6楼#
发布于:2003-05-13 21:23
你的GUID从哪儿得来的啊?
|
|
7楼#
发布于:2003-05-13 21:40
VC++和BCB的确是不能完全照搬的,因为有一些类的定义有一点不同!!!
我印象中好像是这个PSP_INTERFACE_DEVICE_DETAIL_DATA 有一点出入的,但我现在手头上没资料,程序都在实验室的机上,所以暂时不能准确指出是哪里了,你可以上网找找相关的文章或windows api的书,我当时也为这个问题郁闷了很久,咔咔~~ :D |
|
8楼#
发布于:2003-05-14 18:49
我们得问题解决了,但是现在又要读写端口,没有函数,自己写,我觉得还是在vc里好啊!只是界面难而已,努力!GUID是驱动编写的设备标示,注册表也有得啊!! :D :D :D
|
|
|
9楼#
发布于:2003-06-23 10:52
请问你们的问题怎么解决的?
我也遇到了setdienuminterface返回ERROR_NO_MORE_ITEMS的问题 谢谢! |
|
10楼#
发布于:2003-06-23 11:29
VC做DLL,在VB或Delphi/BCB中调用。
|
|
|
11楼#
发布于:2003-06-23 12:25
setdienuminterface返回ERROR_NO_MORE_ITEMS
单用vc编程 之前我用SetupDiEnumDeviceInfo枚举正常,但是换成SetupDiEnumDeviceInterfaces 就返回no_more_items, 另外, 我注意到SetupDiGetClassDevs(pGuid, 0, // Enumerator 0, DIGCF_PRESENT); 中最后一个参数加上|DIGCF_DEVICEINTERFACE就什么都读不出, 在线等待,谢谢 |
|