0

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

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

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

直接使用它是不好的做法#include(路径取决于 DDK 版本等),此外,没有真正需要安装 DDK --- 我的应用程序唯一依赖它的是这个非常头文件。

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

4

3 回答 3

0

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

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

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

于 2010-09-17T12:14:17.467 回答
0

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

无论您采取哪种方式,我都会说将两者都包裹在#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 是我所拥有的全部),工作正常

于 2010-09-17T12:15:20.783 回答
0

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

#define _WIN1394_C
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <ntdd1394.h>
#undef _WIN1394_C
于 2011-01-27T22:24:06.480 回答