我尝试从Github上的Windows驱动程序示例(https://github.com/Microsoft/Windows-driver-samples/tree/97cf8edcaddff4fdbc5cc48d56b7d7eb2c39b749/hid/vhidmini2)修改KMDF vhidmini2示例。我的一个修改需要包含hidpi.h头文件。但是,当我这样做时,我遇到编译器错误,其中大部分都是:
identifier "USAGE" is undefined
以及几个:
redefinition: different type modifiers
以及一些语法错误。
为了尝试排除错误,我尝试编译vhidmini2驱动程序(工作正常),然后在vhidmini.h文件中插入include语句(然后导致编译失败)。这是我修改过的vhidmini.h文件的include部分;其余的代码没有受到影响。
#ifdef _KERNEL_MODE
#include <ntddk.h>
#else
#include <windows.h>
#endif
#include <wdf.h>
#include <hidport.h> // located in $(DDK_INC_PATH)/wdm
#include <Hidpi.h>
#include "common.h"
顺便说一句,我发现在Stack Overflow中发布了类似的问题:WDK (Windows Driver Kit) and VC++ headers problem。这个问题的解决方案似乎是告诉Visual Studio在加载SDK头之前加载WDK头。问题是几年之久,Visual Studio 2015不允许以相同的方式编辑VC ++目录。如果这确实是我的问题的解决方案,那么如何在新的Visual Studio中进行编辑呢?我曾尝试查看该项目的属性表,但格式完全不同。
答案 0 :(得分:1)
我设法通过替换
来解决问题#include <Hidpi.h>
与
#include <hidsdi.h>
我的猜测(基于此处回答的类似问题:Compile error in 'winbase.h')是hidsdi.h中包含hidpi.h所需的一些内容。因此,您应该在hidpi.h之前包含hidsdi.h,或者只包含hidsdi.h。这对我来说仍然很奇怪,因为我正在使用的结构的Windows文档(HIDP_PREPARSED_DATA)说我只需要包含hidpi.h;如果这是一个错字(我不会第一次看到Windows文档中的拼写错误),我不会感到惊讶。