Включение заголовка Windows DDK - PullRequest
0 голосов
/ 17 сентября 2010

Я пишу пользовательское приложение Win32. Однако в рамках этого приложения мне нужно сделать DeviceIo вызовы в стек Windows 1394. Заголовочный файл, содержащий прототипы для этих вызовов DeviceIo, включен как часть Windows DDK по адресу:

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

(Хотя в заголовке утверждается, что он «только в режиме ядра», прототипы предназначены для IOCTL пользовательского пространства.) Мне интересно, как лучше всего включить этот файл в мое приложение.

Было бы плохой практикой #include напрямую (путь зависит, помимо прочего, от версии DDK), и, кроме того, нет реальной необходимости устанавливать DDK - единственная зависимость моего приложения есть на это для этого самого заголовочного файла.

Значит, мне интересно, как лучше поступить? Я собирался включить урезанную версию прямо в исходный код приложения, но на самом деле не уверен.

Ответы [ 3 ]

0 голосов
/ 17 сентября 2010

Я бы сказал, включите либо урезанную версию, либо, если то, что вы используете, действительно мало, импортируйте копию прямо в главный заголовок вашего проекта.

независимо от того, по какому пути вы идете, я бы сказал, что оберните оба в #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это все что у меня есть) отлично работает

0 голосов
/ 28 января 2011

Это работает для меня (взят из одного из образцов в DDK):

#define _WIN1394_C
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <ntdd1394.h>
#undef _WIN1394_C
0 голосов
/ 17 сентября 2010

Как вы связываетесь с реальными реализациями этих функций? В документации по библиотеке, с которой вы ссылаетесь, должно быть указано, что нужно включить.

Кроме того, вам нужны другие люди, чтобы иметь возможность создавать это приложение, или это работа одного человека? Вы всегда можете настроить виртуальную сборочную машину с установленным DDK и таким образом включить файл #include.

В противном случае, да, включение прототипов функций в ваш собственный урезанный заголовочный файл (с комментарием, объясняющим, почему вы это делаете!) - это, вероятно, путь.

...