在WDK驱动程序中包含hidpi.h会导致编译错误

时间:2016-03-18 03:37:29

标签: c visual-studio-2015 hid wdk kmdf

我尝试从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中进行编辑呢?我曾尝试查看该项目的属性表,但格式完全不同。

1 个答案:

答案 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文档中的拼写错误),我不会感到惊讶。