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++

  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
    .

  10. #10
    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
    Oui mais il ne pourra pas appeler les méthodes de l'objet donc c'est pas très utile.

  11. #11
    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
    Citation Envoyé par Twindruff Voir le message
    Oui mais il ne pourra pas appeler les méthodes de l'objet donc c'est pas très utile.
    Exact, j'ai cru que c'était un membre privé de la classe.
    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
    .

  12. #12
    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
    Oui effectivement l'appel n'est plus possible .

    re:
    Je te conseille d'utiliser directement direct show sans passer par la dll, les fonctions de direct show sont parfaites !
    je souhaite effectivement les utiliser mais si je pouvais éviter Dshow.h dans mon projet tout en continuant a les utiliser sa serait le top du top.

    Merci pour vos réponses tout de même

  13. #13
    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 truc que tu peux faire c'est créer un couche intermédiare à DirectShow dans ta DLL, mais bon pourquoi vouloir faire ça ?

  14. #14
    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
    Le but était à la base que l'utilisateur n'est pas besoin d'installer Dshow et donc la SDK mais que je puisse utiliser tout de même les fonctions dans mon programme.

    On m'a donc conseillé la création d'une DLL.

  15. #15
    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
    Ce que tu peux faire c'est intégrer à ton projet les fichiers de DirectShow dont dépend ton projet, les headers, les .lib, etc

  16. #16
    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 re:
    écoute ceci
    Je pense que direct X est installé dans tout système d'exploitation microsoft ( pour jouer aux jeux videos, lire les video etc..)
    quand j'ai crée mon programme direct show, je l'ai tester dans plusieurs machine et ça a marché, danc pas de souci.
    fais le sans dll et tu n'auras pas de problème et tu n'auras rien a installer, a part l'exécutable de ton application. si besoin y est installer le pack direct X redistributable que tu as certainnement rencontré.
    ps : direct show fait partie de directX

  17. #17
    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
    Je pense qu'il parle d'utilisateur au sens autres développeurs, qui n'ont pas envie d'installer le platform SDK pour compiler son programme.

  18. #18
    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
    Je pense qu'il parle d'utilisateur au sens autres développeurs, qui n'ont pas envie d'installer le platform SDK pour compiler son programme.
    Oui c'est bien sa.

  19. #19
    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 re:
    Pour les utilisateurs de ta prochaine DLL essaye de trouver la solution. De plus direct show est une bibliotheque multimedia de haut niveau, donc compréhensible par les developpeurs.
    Pour la dll (API) que tu veux créer je te souhaite bon courage, tous les projets demarre de cette manière, car ton projet est assez ambitieux
    A+

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