IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Création d'une DLL


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : Février 2009
    Messages : 15
    Par défaut Création d'une DLL
    Bonjour,
    je cherche à créer une DLL qui inclut des fonctions et structures de la SDK (Dshow.h) pour ne pas avoir à inclure celle-ci dans mon projet.

    voici le .h (DLL.H):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #ifdef DLL_EXPORTS
    #define DLL_API __declspec(dllexport)
    #else
    #define DLL_API __declspec(dllimport)
    #endif
     
    // Cette classe est exportée de DLL.dll
    class DLL_API CDLL {
    public:
    	CDLL(void);
    	// TODO*: ajoutez ici vos méthodes.
     
    };
     
     
    extern DLL_API IGraphBuilder *_pGB;
    et voici le .cpp (DLL.cpp):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    #include "stdafx.h"
    #include <Dshow.h>
    #include "DLL.h"
     
     
    #ifdef _MANAGED
    #pragma managed(push, off)
    #endif
     
    BOOL APIENTRY DllMain( HMODULE hModule,
                           DWORD  ul_reason_for_call,
                           LPVOID lpReserved
    					 )
    {
    	switch (ul_reason_for_call)
    	{
    	case DLL_PROCESS_ATTACH:
    	case DLL_THREAD_ATTACH:
    	case DLL_THREAD_DETACH:
    	case DLL_PROCESS_DETACH:
    		break;
    	}
        return TRUE;
    }
     
    #ifdef _MANAGED
    #pragma managed(pop)
    #endif
     
    // Il s'agit d'un exemple de variable exportée
    DLL_API int nDLL=0;
     
    DLL_API IGraphBuilder *_pGB;
    La compilation fonctionne et IGraphBuilder est bien vu comme une structure.
    J'inclus ensuite DLL.h dans mon projet et pas Dshow.h (c'est le but).
    je link le .lib.
    J'ai vérifié avec dependancy ma DLL est bien dans le projet mais IGraphBuilder n'est plus vu comme une structure (int par défaut) et je ne peux donc pas utiliser de structure de ce type.

    Pourriez vous m'indiquer ou ai-je commis une (grossière certainement) erreur ?

    Merci d'avance

  2. #2
    Membre expérimenté Avatar de Twindruff
    Inscrit en
    Janvier 2005
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 216
    Par défaut
    Quel est exactement ton problème ?
    Tu as un problème au moment de la compilation te disant que IGraphBuilder n'est pas défini ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : Février 2009
    Messages : 15
    Par défaut
    Hum en gros oui.
    Spécificateur de type manquant -int pris en comtpe par défaut.

  4. #4
    Membre très actif
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Par défaut
    salut. donc tu veux juste intégrer direct show et créer un lecteur multimedia ensuite il faudrait ajouter IMediaEvent, IMediaControl dans la dll. si je ne m'abuse les interface dont tu parle sont déjà dans des dll COM si je ne m'abuse, pourquoi en créer d'autres ? de plus les fonction de dshow sont a un niveau correcte d'abstraction.

  5. #5
    Membre expérimenté Avatar de Twindruff
    Inscrit en
    Janvier 2005
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 216
    Par défaut
    Le problème c'est que tu utilises IGraphBuilder dans ton .h alors qu'il n'est pas défini.

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Ton problème c'est que ton fichier DLL.h n'est pas autosuffisant. Il n'inclus pas les fichiers dont il a besoin.

    Si on regarde ta compilation de DLL, tu compiles DLL.cpp qui inclue <Dshow.h>
    puis DLL.h. Dans ce ca, pas de problème puisque le compilateur lorsqu'il compile DLL.cpp connait le type IGraphBuilder utilisé après dans DLL.h. D'ailleurs, si tu changes l'ordre d'inclusion (DLL.h en premier et ensuite Dshow.h, je parie que cela ne marche plus.

    Par contre, dans ton programme utilisateur, tu inclus DLL.h (normal) mais le type IGraphBuilder n'est pas encore connu.

    Pour que cela marche, il faut que Dshow.h soit inclus dans DLL.h.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : Février 2009
    Messages : 15
    Par défaut
    merci pour les réponses,
    Effectivement je ne peux pas inverser l'ordre d'inclusion.

    Mon problème et que je souhaite pas que dShow.h apparaissent dans mon programme principal, donc je ne peux pas le mettre dans le DLL.h que je place dans mon programme principal.

    Je pensais que l'avoir inclue dans la DLL permettrait d'y faire appel sans inclure Dshow.h dans mon principal.

    Erreur de compréhension de ma part donc.

  8. #8
    Membre très actif
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Par défaut
    Citation Envoyé par kill4m Voir le message
    merci pour les réponses,
    Effectivement je ne peux pas inverser l'ordre d'inclusion.

    Mon problème et que je souhaite pas que dShow.h apparaissent dans mon programme principal, donc je ne peux pas le mettre dans le DLL.h que je place dans mon programme principal.

    Je pensais que l'avoir inclue dans la DLL permettrait d'y faire appel sans inclure Dshow.h dans mon principal.

    Erreur de compréhension de ma part donc.
    re:
    Je te conseille d'utiliser directement direct show sans passer par la dll, les fonctions de direct show sont parfaites !

  9. #9
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Ce que tu peut faire alors comme _pGB est un pointeur, c'est en début de DLL.h écrire pour faire une déclaration amont et ne rien changer d'autre à ton code.

    Ainsi, le compilateur est content, il sait que IGraphBuilder est une classe et que _pGB est un pointeur sur cette classe. Et quand tu compile DLL.cpp, comme dshow.h est inclus dedans, le compilateur sait faire son travail.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

Discussions similaires

  1. Pb de compilation lors de la création d'une DLL
    Par Annaced dans le forum Visual C++
    Réponses: 8
    Dernier message: 15/06/2010, 23h26
  2. création d'une dll (classe c++)
    Par TheShadow dans le forum MFC
    Réponses: 4
    Dernier message: 10/04/2006, 16h21
  3. Réponses: 4
    Dernier message: 10/04/2006, 16h12
  4. Problème de création d'une dll...
    Par adrien954 dans le forum C++Builder
    Réponses: 4
    Dernier message: 21/10/2005, 10h46
  5. Conventions à utiliser pour la création d'une DLL
    Par Writer dans le forum Langage
    Réponses: 3
    Dernier message: 02/08/2005, 09h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo