首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

一个并不复杂,但困扰小弟我很久的有关问题

2012-12-17 
高分求教一个并不复杂,但困扰我很久的问题我从网上下载了一个testusb的程序 http://www.vckbase.com/code/

高分求教一个并不复杂,但困扰我很久的问题
我从网上下载了一个testusb的程序 http://www.vckbase.com/code/winsys/driver/testusb.rar 
用来枚举usb设备的一个测试程序,需要DDK配合编译

我用vs2005+ddk 就是编译不过
网上解决的错误的办法我都试过了:
不要跟我说我没加库 我加了hid.lib setupapi.lib
不要说我没用extern引用头文件 我用了
 extern "C" {
#include "hidsdi.h"       //DDK文件
#include <setupapi.h>
}
不要说我没试着注释掉某个结构体,我也试了 就是编译不过
1>d:\winddk\7600.16385.0\inc\api\usbiodef.h(204) : error C2065: 'PASSIVE_LEVEL' : undeclared identifier
1>d:\winddk\7600.16385.0\inc\api\usbiodef.h(207) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\winddk\7600.16385.0\inc\api\usbiodef.h(207) : error C2199: syntax error : found 'void (' at global scope (was a declaration intended?)
1>d:\winddk\7600.16385.0\inc\api\hidpi.h(303) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\winddk\7600.16385.0\inc\api\hidpi.h(303) : error C2374: '__drv_maxIRQL' : redefinition; multiple initialization
1>        d:\winddk\7600.16385.0\inc\api\usbiodef.h(204) : see declaration of '__drv_maxIRQL'
1>d:\winddk\7600.16385.0\inc\api\hidpi.h(303) : error C2146: syntax error : missing ';' before identifier 'NTSTATUS

这是错误片段

如果有可编译的工程 打包发我也行 多谢啦!
[最优解释]


#include "stdafx.h"
#include <setupapi.h>
#include <devguid.h>
#include <regstr.h>
#pragma comment (lib, "setupapi.lib")

BOOL GetDeviceInfo(void);

int _tmain(int argc, _TCHAR* argv[])
{
GetDeviceInfo();
system("pause");
return 0;
}

BOOL GetDeviceInfo(void)
{
HDEVINFOm_hDevInfo;
SP_DEVINFO_DATAm_stuDevInfoData;

m_hDevInfo = SetupDiGetClassDevs(&GUID_DEVCLASS_USB, NULL, NULL, DIGCF_PRESENT);

if (m_hDevInfo == INVALID_HANDLE_VALUE 
[其他解释]
 m_hDevInfo == NULL)
{
wprintf(_T("Fail to get USB device handle!"));
return FALSE;
}
else
{
m_stuDevInfoData.cbSize = sizeof(SP_DEVINFO_DATA);

int nIndex(0);
DWORDdwBufferSize(0);
TCHAR*szInstanceId(NULL);

while (SetupDiEnumDeviceInfo(m_hDevInfo, ++nIndex, &m_stuDevInfoData))
{
if (!SetupDiGetDeviceInstanceId(m_hDevInfo, &m_stuDevInfoData, NULL, 0, &dwBufferSize))
{
szInstanceId = new TCHAR[dwBufferSize];
}

if (SetupDiGetDeviceInstanceId(m_hDevInfo, &m_stuDevInfoData, szInstanceId, dwBufferSize, NULL))
{
wprintf(_T("Result:\n%s\n"), szInstanceId);

else
{
wprintf(_T("Fail to get USB device information!"));
delete [] szInstanceId;
return FALSE;
}

if (szInstanceId != NULL)
{
delete [] szInstanceId;
}
}


SetupDiDestroyDeviceInfoList(m_hDevInfo); 
}
return TRUE;
}


[其他解释]
没弄过,MARK。
[其他解释]
帮顶下~
[其他解释]
顶楼主,我也试了,出现大堆 union 没标识符,没定义的东东大把,也出现了大量错误! 
不过后来乱搞,从C:\WinDDK\7600.16385.0\inc\api弄出些文件放在 程序当前目录后就行了,Debug,Release均通过! usbhead.h中定义的结构得都注释掉!
 项目我放下在了 http://u.115.com/file/f67874f19d,楼主自己去下!
[其他解释]
PASSIVE_LEVEL是写驱动的时候才会涉及到的,这是一个任务优先级的值。
setupapi是不需要涉及这层东西的,如果你只是要枚举设备,非常简单,等下饭后我给你PO个源码。
[其他解释]
拜读。学习了。
[其他解释]
少DDK 的头文件
[其他解释]
ddk7600就是编译不过去,我装了个DDK6000 就好了  我(#‵′)靠

另外一个BT问题 :
我用vs2005编译驱动,这个没问题
问题是:我必须改动.c文件才会重新编译
改动.h文件 不会重新编译

真不爽啊,每次改.h文件都要随便改一下.c文件 编译以后 改的.h文件才会生效

这个有高手指点下吗?

是哪个编译参数的问题吗?



[其他解释]
能不能再详细讲讲!怎么感觉DDK6000是vista的呀,DDK7600是win7的,你到底要在什么平台上开发呀。

热点排行