2010-09-17 4 views
0

J'écris une application Win32 espace utilisateur. Toutefois, dans le cadre de cette application, j'ai besoin de faire quelques appels DeviceIo à la pile Windows 1394. Le fichier d'en-tête qui contient les prototypes de ces DeviceIo appels est inclus dans Windows DDK à:Y compris un en-tête DDK Windows

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

(. Bien que l'en-tête prétend être « mode noyau uniquement » les prototypes sont pour IOCTL-espace utilisateur) Je me demande quelle est la meilleure façon d'inclure ce fichier dans mon application.

Ce serait une mauvaise pratique de #include directement (le chemin dépend, entre autres choses, de la version DDK) et en plus il n'y a pas vraiment besoin d'installer le DDK --- la seule dépendance de mon application il est pour ce fichier d'en-tête même. Par conséquent, je me demande quel est le meilleur plan d'action? J'envisageais d'inclure une version allégée directement dans ma source d'applications mais je n'en suis pas vraiment sûr.

Répondre

0

Je dirais inclure soit une version simplifiée, ou si votre utilisation est vraiment petite, importer la copier directement dans l'en-tête principal de votre projet.

quel que soit le chemin que vous prenez, je dirais envelopper à la fois dans #define gardes, incas quelqu'un d'autre qui bricole avec cela inports l'en-tête correct et provoque des problèmes. Mieux encore serait quelque chose pour permettre à l'utilisateur de définir soit le chemin vers le DDK ou utilisez votre version dépouillée:

#define EXP(x) #x 
#define STR(x) EXP(x) 

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

testé ci-dessus en utilisant gcc 3.4.5 (Je sais, mais dev-cpp est tout J'ai où je suis), fonctionne très bien

0

Comment liez-vous les implémentations réelles de ces fonctions? La documentation pour la bibliothèque que vous liez doit vous indiquer ce que #include.

De même, avez-vous besoin d'autres personnes pour pouvoir créer cette application ou est-ce un travail d'un seul homme? Vous pouvez toujours configurer une machine de build virtuelle sur laquelle DDK est installé et #include le fichier de cette façon.

Sinon, oui, y compris les prototypes de fonction dans votre propre fichier d'en-tête dépouillé (avec un commentaire pour dire pourquoi vous faites cela!) Est probablement le chemin à parcourir.

+0

L'en-tête ne contient que des structures et des constantes. Ceux-ci sont ensuite passés à la fonction DeviceIo Win32. Donc, il n'y a pas de mise en œuvre, en soi. C'est juste une interface publique avec le noyau. –

0

Cela fonctionne pour moi (extrait de l'un des échantillons DDK):

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