我正在编写用户空间Win32应用程序。但是,作为此应用程序的一部分,我需要对Windows 1394堆栈进行一些DeviceIo
调用。包含这些DeviceIo
调用原型的头文件作为Windows DDK的一部分包含在:
C:\WinDDK\7600.16385.1\inc\api\ntdd1394.h
(虽然标题声称是“仅内核模式”,但原型是针对用户空间IOCTL的。)我想知道在我的应用程序中包含此文件的最佳方法是什么。
直接#include
它是不好的做法(路径取决于DDK版本),此外没有真正需要安装DDK ---唯一的依赖我的应用程序就是这个头文件。
因此,我想知道最佳行动方案是什么?我正在考虑直接在我的应用程序源中包含它的精简版本,但实际上我不确定。
答案 0 :(得分:0)
您如何链接这些功能的实际实现?您要链接的库的文档应该告诉您#include的内容。
另外,您是否需要其他人才能构建此应用程序,还是单人工作?您始终可以设置一个安装了DDK的虚拟构建计算机,并以此方式#include该文件。
否则,是的,包括你自己的剥离头文件中的函数原型(注释说你为什么这样做!)可能是要走的路。
答案 1 :(得分: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就是我所拥有的所有内容),工作正常
答案 2 :(得分:0)
这对我有用(取自DDK中的一个样本):
#define _WIN1394_C
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <ntdd1394.h>
#undef _WIN1394_C