2010-07-26 3 views
4

Я пытаюсь читать с USB-устройства HID, я знаю, как это сделать на C#, используя DLLImport hid.dll, но я хочу сделать это с C++, таким образом Мне не нужно объявлять все структуры и т. Д., И просто включать файлы заголовков.WDK (Windows Driver Kit) и проблема с заголовками VC++

Так что я скачал WDK, а затем, когда в том числе файлы заголовков и ссылок библиотеки я получаю много ошибок:

#include <windows.h> 

extern "C" { 
    #include <hidsdi.h> 
} 

int main(){ 

} 

ошибки (6 из 163):

Error 1 error C2065: 'PASSIVE_LEVEL' : undeclared identifier c:\winddk\7600.16385.1\inc\api\hidpi.h 302 driver 
Error 2 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\winddk\7600.16385.1\inc\api\hidpi.h 303 driver 
Error 3 error C2146: syntax error : missing ';' before identifier 'NTSTATUS' c:\winddk\7600.16385.1\inc\api\hidpi.h 303 driver 
Error 4 error C2143: syntax error : missing ';' before '__stdcall' c:\winddk\7600.16385.1\inc\api\hidpi.h 303 driver 
Error 5 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\winddk\7600.16385.1\inc\api\hidpi.h 303 driver 
Error 6 error C2377: 'NTSTATUS' : redefinition; typedef cannot be overloaded with any other symbol c:\winddk\7600.16385.1\inc\api\hidpi.h 303 driver 

ОК, поэтому я где-то читал, что мне нужно обновить SDK Windows, у меня был Microsoft Windows SDK v6.0A, я загрузил и установил Windows SDK v7.0. Но потом, похоже, у меня есть два SDK сейчас? Как я правильно делаю обновление SDK в визуальной студии?

Я очень ценю вашу помощь,

Спасибо, Carlos

ответ

8

Я нашел решение, не знаю, почему это работает, но это !:

В Visual Studio перейти to:

Инструменты-> Опции-> Проекты-> Каталоги VC++, а затем Показать каталоги для: include файлов.

Добавить папки:

C: \ WinDDK \ 7600.16385.1 \ вкл \ ДДК и C: \ WinDDK \ 7600.16385.1 \ вкл \ апи

Теперь вот трюк, который решил проблему для меня, и я не знаю почему, потому что кажется странным, но вот он:

C: \ WinDDK \ 7600.16385.1 \ inc \ ddk -> Этот каталог должен быть первым каталогом в списке!

C: \ WinDDK \ 7600.16385.1 \ вкл \ апи -> Этот каталог должен быть выше "$ (WindowsSdkDir) \ включают в себя", но ниже "$ (VCInstallDir) включают в себя"

Пример:

C:\WinDDK\7600.16385.1\inc\ddk 
$(VCInstallDir)include 
$(VCInstallDir)atlmfc\include 
C:\WinDDK\7600.16385.1\inc\api 
$(WindowsSdkDir)\include 
$(FrameworkSDKDir)include 

Carlos

+2

проблема заключается в том, что WDK и SDK содержат различные файлы заголовков, так что вы должны заставить заголовки WDK быть включены первым, для заголовка WDK включает. – Christopher

+0

Помните ли вы, что вы использовали для lib? Поскольку он не связывает функцию, которую я вызываю из WDK. Я добавил lib \ win7 \ i386 \ из WDK, но, по-видимому, не работает –

+0

Спасибо, миллиард, тоже решил мою проблему;) – Breeze