BuilderC++, dll dynamique

Erwann Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   -  
 mega-squall - 15 nov. 2006 à 19:41
Bonjour,

je cherche actuellement à développer sur Builder C++ une application divisée en deux parties: interface(la partie exécutable) et une/des librairie(s) à coté, qui contient le code le plus important.
Les librairies sont appelées en dynamique pour 2 raisons: mémoire et indépendance vis à vis de l'exécutable.

Mon problème est que j'aimerais savoir si je peux dynamiquement créer et utiliser des classes définies dans mes dlls. Et si c'est possible, comment faire.

Si une ame charitable pouvait m'aider?

Wan
A voir également:

4 réponses

mamiemando Messages postés 33691 Date d'inscription   Statut Modérateur Dernière intervention    
Je ne comprends pas trop ce que tu entends par "intégrer dynamiquement une librairie". Pour moi ca va à l'encontre du principe même de la compilation du c++. Où alors j'ai pas tout compris ;) Bon en gros tu as un :
#include <lib_dyna>

Tu le changes en :
#include <lib_dyna>
#define LIB_DYNA

et pour tes classes :
#ifdef LIB_DYNA
class plop{
//...
};
#endif

Mais comme il y a un # c'est fait par le précompilateur... au même titre que le #include de ta librairie.
0
Erwann Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   13
 
re
Je n'ai pas utilisé le mot "intégré" parce que je ne crois pas qu'il soit juste.
Je n'ai pas bien m'expliquer, parce que ce que tu me proposes ne correspond pas du tout. les dlls contiennent du code, des fonctions, des classes. Le problème est que je voudrais, dans mon exécutable, pouvoir utiliser ces classes. Le terme dynamique signifie que une dll ne sera chargée que lorsque j'ai besoin d'elle, (au contraire du statique ou toutes les librairies sont chargées des le départ). Mais je n'ai pas trouvé comment, en dynamique, pouvoir utiliser une classe déclarée dans une dll.
J'espere que j'ai été plus clair. Et que donc tout le monde me donnera plein d'aide et de cadeaux ;)

Wan


0
ferry Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
Jai vu ton message pour ta dll et jaimerai savoir si tu as reussi a faire communiquer ta dll avec ton executable ? si oui comment tu as fai sil te plai ,,,,?
0
mega-squall
 
Salut,

Malheureusement, lorsqu'une DLL est chargée dynamiquement par un programme, celui ci ne peut utiliser que les fonctions qu'elle contient. Lorsqu'une DLL contient une classe, elle doit etre chargée statiquement pour pouvoir être utilisée par le compilateur (car il s'agit d'un typedef ...)

En revanche, si tu veux toujours travailler en objet et en dynamique avec les avantages que cela apporte, tu peux définir une classe d'encapsulation dans ton programme et coder ses méthodes pour qu'elles appellent des fonctions de la DLL. Par exemple :

`LecteurCarte.dll` contient la fonction `int lecteur_lire (char);`.
Cette fonction contient le code de `int LecteurCarte::Lire (char)`.
Dans ton programme tu codes :

//------------------------------
// monProgramme.hpp
//------------------------------

class LecteurCarte {
int Lire (char port);
};

//------------------------------
// monProgramme.p
//------------------------------

#include "monProgramme.hpp"

int LecteurCarte::Lire (char port) {

int (*ptr) (char);
HMODULE dll_handle = LoadLibrary ("LecteurCarte.dll");
ptr = ((int)(*)(char)) GetProcAddress (dll_handle, (LPCSTR) "lecteur_lire");
int result = ptr (port);
FreeLibrary (dll_handle);
return result;

}

//------------------------------

Tu n'as pas une flexibilité totale de la classe (car tu ne peux pas définir les méthodes pures ou les attributs depuis la DLL), mais tu peux tout de même customiser le code executé par les méthodes ...

---
mega-squall,
En espérant que ca soit clair et utile ^^
0