【问题标题】:Including a Windows DDK Header包括 Windows DDK 标头
【发布时间】:2011-01-28 06:24:06
【问题描述】:

我正在编写一个用户空间 Win32 应用程序。但是,作为此应用程序的一部分,我需要对 Windows 1394 堆栈进行一些 DeviceIo 调用。包含这些 DeviceIo 调用原型的头文件作为 Windows DDK 的一部分包含在:

C:\WinDDK\7600.16385.1\inc\api\ntdd1394.h

(虽然标题声称是“仅内核模式”,但原型是用于用户空间 IOCTL。)我想知道在我的应用程序中包含此文件的最佳方法是什么。

直接#include 是不好的做法(路径取决于 DDK 版本等)而且实际上不需要安装 DDK --- 我的应用程序的唯一依赖项就是为了这个头文件。

因此我想知道最好的行动方案是什么?我正在考虑直接在我的应用程序源中包含它的精简版本,但真的不确定。

【问题讨论】:

    标签: windows header wdk


    【解决方案1】:

    我会说包括精简版本,或者如果您使用的内容非常小,请将其导入复制到您项目的主标题中。

    无论您采用哪条路径,我都会说将两者都包装在#define 守卫中,以防其他修补此内容的人输入正确的标题并造成麻烦。更好的是允许用户定义 DDK 的路径或使用您的精简版本:

    #define EXP(x) #x
    #define STR(x) EXP(x)
    
    #if defined(__WIN32_DDK_PATH)
        #include STR(__WIN32_DDK_PATH)
    #else
    //Stripped DDK stuff...
    #endif
    

    使用 gcc 3.4.5 测试了上述内容(我知道,但我现在只有 dev-cpp),工作正常

    【讨论】:

      【解决方案2】:

      您如何链接这些功能的实际实现?您链接的库的文档应该告诉您#include 的内容。

      另外,您是否需要其他人来构建此应用程序,或者它是一个人的工作?您总是可以设置一个安装了 DDK 的虚拟构建机,并以这种方式#include 文件。

      否则,是的,在您自己的精简头文件中包含函数原型(并说明您为什么这样做!)可能是要走的路。

      【讨论】:

      • 标头只包含结构和常量。然后将它们传递给 DeviceIo Win32 函数。因此,本身没有实现。它只是内核的一个公共接口。
      【解决方案3】:

      这对我有用(取自 DDK 中的一个示例):

      #define _WIN1394_C
      #include <windows.h>
      #include <stdlib.h>
      #include <stdio.h>
      #include <ntdd1394.h>
      #undef _WIN1394_C
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-27
        • 1970-01-01
        • 2010-10-09
        • 1970-01-01
        • 2019-09-26
        • 2015-02-03
        • 2012-08-11
        • 2011-07-11
        相关资源
        最近更新 更多