包括一个Windows DDK标题

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

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

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

直接包含它(这个path取决于DDK的版本)是不好的做法,除此之外,并不需要安装DDK —我的应用程序对它的唯一依赖是为这个非常头文件。

因此,我想知道最好的行动是什么? 我正在考虑直接在我的应用程序源代码中包含精简版本,但实际上并不确定。

Solutions Collecting From Web of "包括一个Windows DDK标题"

我会说包括一个精简的版本,或者如果你使用的是真的很小,导入将其直接复制到项目的主标题。

不管你选择哪一条路径,我都会把#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是我所有的地方)测试了上面的,工作正常

你如何链接到这些功能的实际实现? 你正在链接的库的文档应该告诉你要#include什么。

此外,你是否需要其他人能够建立这个应用程序或者是一个人的工作? 你总是可以设置一个安装有DDK的虚拟生成机器,并包含这个文件。

否则,是的,包括你自己的头文件中的函数原型(有一个评论说你为什么这样做!)可能是要走的路。

这适用于我(从DDK中的一个样本中获取):

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