BuilderC++, dll dynamique

Fermé
Erwann Messages postés 52 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 16 septembre 2005 - 14 juin 2005 à 16:11
 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

4 réponses

mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
14 juin 2005 à 20:27
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 jeudi 24 juillet 2003 Statut Membre Dernière intervention 16 septembre 2005 13
15 juin 2005 à 08:43
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 mardi 16 mai 2006 Statut Membre Dernière intervention 16 mai 2006
16 mai 2006 à 09:54
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
15 nov. 2006 à 19:41
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.cpp
//------------------------------

#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