C++ DLL et exportation

Fermé
kill4m Messages postés 224 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 28 janvier 2012 - 13 févr. 2009 à 14:37
kill4m Messages postés 224 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 28 janvier 2012 - 13 févr. 2009 à 17:49
Bonjour,
voila mon problème je créé ma DLL avec ce .h :

#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 int nDLL;

extern DLL_API IGraphBuilder *_pGB;

et ce .cpp


#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;


// Il s'agit du constructeur d'une classe qui a été exportée.
// consultez DLL.h pour la définition de la classe
CDLL::CDLL()
{
return;
}


La compilation fonctionne mon .DLL et .lib sont bien créé.
Mon problème est ici : IGraphBuilder *_pGB;
Cette structure est définit dans Dshow.h.
Je souhaite utilisé cette structure dans mon projet sans avoir a inclure Dshow.h.

Mais lorsque j'inclus mon DLL.h dans mon projet IGraphBuilder n'est plus définit et donc erreur.
L'erreur ne vient peut être du fait que mon Dshow n'est pas dans ma DLL ou autre ...
Une idée.

Merci d'avance pour l'aide apportée

4 réponses

kill4m Messages postés 224 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 28 janvier 2012 26
13 févr. 2009 à 15:10
Pour faire plus simple:
- Comment inclure un .h dans une DLL et utilisé ces structures sans inclure le .h dans notre programme principal ?
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
13 févr. 2009 à 15:29
Salut.
Pour utilisé une structure, il faut la déclarer. Ce qui se traduit en général par inclure le .h dans l'unité de compilation (en général le .cpp)
Voilà, il n'y a pas plus simple, si tu veux utiliser une structure il faut que tu la déclares.
0
kill4m Messages postés 224 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 28 janvier 2012 26
13 févr. 2009 à 16:41
merci de la réponse mais mon problème est que je ne souhaite justement pas inclure ce point .h dans mon programme principal mais juste l'inclure dans la DLL.
ce qui apparement n'est pas possible.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
13 févr. 2009 à 16:58
En effet, ce n'est pas possible.
Ou alors, tu fait un .h spécifique à la déclaration de cette structure, si ce qui te gène c'est les autres trucs présent dans le .h
0
kill4m Messages postés 224 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 28 janvier 2012 26
13 févr. 2009 à 17:49
Merci pour la réponse je tente autrement.
0