WDK Driver 中包含 hidpi.h 导致编译错误
Including hidpi.h in WDK Driver Causes Compilation Errors
我正在尝试从 Github (https://github.com/Microsoft/Windows-driver-samples/tree/97cf8edcaddff4fdbc5cc48d56b7d7eb2c39b749/hid/vhidmini2) 上的 Windows driver 样本修改 KMDF vhidmini2 样本。我的修改之一需要包含 hidpi.h header 文件。然而,当我这样做时,我得到了编译器错误,其中大部分是:
identifier "USAGE" is undefined
以及一些:
redefinition: different type modifiers
以及一些语法错误。
为了尝试排除错误,我尝试编译 vhidmini2 driver(工作正常),然后在 vhidmini.h 文件中插入 include 语句(然后导致编译失败)。这是我修改后的 vhidmini.h 文件的包含部分;其余代码保持不变。
#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 headers 之前加载 WDK headers。这个问题已经有几年了,Visual Studio 2015 不允许以同样的方式编辑 VC++ 目录。如果这确实是我的问题的解决方案,那么如何在新 Visual Studio 中进行此编辑?我已经尝试查看该项目的 属性 工作表,但格式完全不同。
我设法通过更换线路解决了问题
#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 文档中看到打字错误)。
我正在尝试从 Github (https://github.com/Microsoft/Windows-driver-samples/tree/97cf8edcaddff4fdbc5cc48d56b7d7eb2c39b749/hid/vhidmini2) 上的 Windows driver 样本修改 KMDF vhidmini2 样本。我的修改之一需要包含 hidpi.h header 文件。然而,当我这样做时,我得到了编译器错误,其中大部分是:
identifier "USAGE" is undefined
以及一些:
redefinition: different type modifiers
以及一些语法错误。
为了尝试排除错误,我尝试编译 vhidmini2 driver(工作正常),然后在 vhidmini.h 文件中插入 include 语句(然后导致编译失败)。这是我修改后的 vhidmini.h 文件的包含部分;其余代码保持不变。
#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 headers 之前加载 WDK headers。这个问题已经有几年了,Visual Studio 2015 不允许以同样的方式编辑 VC++ 目录。如果这确实是我的问题的解决方案,那么如何在新 Visual Studio 中进行此编辑?我已经尝试查看该项目的 属性 工作表,但格式完全不同。
我设法通过更换线路解决了问题
#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 文档中看到打字错误)。