Queqleus questions au sujets des DLL

Résolu
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009 - 12 janv. 2006 à 14:08
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009 - 5 avril 2006 à 10:16
Salut a tous !
je suis de plus en plus interesse par les DLL et l'envie d'en faire une pour mon prochain programme me titille... J'ai lu alors quelques docs :
- http://www.cppfrance.com/code.aspx?id=9915
- http://www.cppfrance.com/code.aspx?id=10539
et 2 ou 3 trucs dans le genre...

Depuis je me pose quelques questions ... a savoir si je creer une dll et que j'y colle cette fonction
extern
"C" __declspec(dllexport) int addition(int a,int b)
{
return a+b;
} (trouvee dans le premier tuto), est-ce que je peut juste la compiler et l'utiliser sans le .lib en appelant ma fonction dynamiquement ou faut-il que je change ma syntaxe ?? Quelle est la meilleure solution ?? Dans ma DLL, est-ce que je peut y mettre une classe et son implantation ?? Comme l'utilise-t-on apres ???

Merci de repondre a mes questions !!
@++

"Avant même de fonctionner, tout programme est déjà obsolète."

7 réponses

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
12 janv. 2006 à 14:31
Pour ta première question, oui tu peux utiliser ta dll telle quelle avec un chargement dynamique, à condition que tu ais bien implémenter le DllMain.

Sinon pour l'histoire des classes, tu ne pourras pas te servir d'une classes pour créer des objet en dehors de la dll, pour la simple et bonne raison que celle ci est charger en mémoire et qu'il n'y aua donc aucun lien entre la classe et les objets crées.

Shell
3
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
13 janv. 2006 à 14:33
En fait les classes et leurs methodes sont exportées comme des fonctions 'simples' sauf qu'elles ont un nom un peu bizarre que le compilo et le llinker comprend pour déterminer la classe et les types des param, indispensable au c++.

Il est tout de même préferrable de ne pas exporter des classes pour les problème de compatibilité entre compilo et linker.
3
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
12 janv. 2006 à 15:33
Il est possible d'exporter des classes d'une dll (MFC en liaison non statique est fait comme cela).
Mais comme en c++ il a de la décration de nom (le nom des fonctions et méthodes réellement exportées contiennent des informations sur la classe, les accès, les type de paramètres...) et que cette décoration est propre à chaque compilo, la dll et le .lib généré ne seront utilisable qu'avec le même compilo.

exemple :

MyDll.h

#ifndef MYDLL_H
#define MYDLL_H


#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif


class MYDLL_API CDllClass
{
public :

void HelloWorld();
};
#endif // MYDLL_H

MyDll.cpp

#include <windows.h>
#define MYDLL_EXPORTS
#include "MyDll.h"



void CDllClass::HelloWorld()
{
MessageBox(NULL, "Hello World", "MyDll", MB_OK);
}


TestDll.cpp

#include <windows.h>


#include "MyDll/MyDll.h"
#pragma comment(lib, "MyDll.lib")


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
{
CDllClass dllobj;


dllobj.HelloWorld();
return 0;
}

Explications :

- MYDLL_EXPORTS doit être défini au début de tous les fichiers sources de la dll (peut être mis dans les options de compilation)
- MyDll.lib doit être rajouté au librairie du linker (avec le #pragma ou dans les options de link).
- MyDll.dll sera chargée automatiquement au démarrage du prog et doit se trouver dans le même répertoire que l'exe.

Avec Visual, il y a un outils appelé depends.exe qui permet de voir les fonctions exportées d'une dll. Si tu ouvres MyDll.dll avec ce prog, et que tu as compilé avec Visual 6.0 tu devrais avoir 2 fcts exportées du genre :
[mailto:??4CDllClass@@QAEAAV0@ABV0@@Z ??4CDllClass@@QAEAAV0@ABV0@@Z]
[mailto:?HelloWorld@CDllClass@@QAEXXZ ?HelloWorld@CDllClass@@QAEXXZ]

ce qui correspond aux méthodes suivantes si tu active l'option C++ (versions 2.1 de depends)
class CDllClass & CDllClass::operator=(class CDllClass const &)
void CDllClass::HelloWorld(void)
0
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
13 janv. 2006 à 11:13
J'avoue que je n'ai pas tout compris au dernier post .... surtout au code en tout cas je crois que c'est plus qu'il ne m'en faut !! j'utiliserai ma DLL qu'avec des fonctions simples et je vais eviter d'y coller mes classes... je crois que pour l'instant vu mon niveau c'est le mieux.... merci a vous deux d'avoir pris le temps de me repondre !!
@++

"Avant même de fonctionner, tout programme est déjà obsolète."
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
volkukan Messages postés 21 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 9 mars 2007
3 avril 2006 à 22:52
Salut!!!
Je ne sais pas ou vous trouver le cours vous permettant de comprendre la façon de coder une dll. Je suis fatiguer de chercher des tutos sur google. Pourtant sa dois pas etre quelque chose de peu demander.
Je n'ais pas acces au doc du forum.
Pouvez vous m'orientez svp
merci davance
0
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
5 avril 2006 à 09:58
perso moi j' ai trouve une doc sur moteurprog.com. Il suffit de chercher un peu. Elle est pas mal sans s'extasier non-plus...

@+

"Avant même de fonctionner, tout programme est déjà obsolète."
0
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
5 avril 2006 à 10:16
J'ai chercher un peu sur le net et voici ce que j'ai trouvee. sa peut etre interessant, a toi de voir :
- http://www.games-creators.org/wiki/Cr%C3%A9ation_et_utilisation_de_DLL
- http://www.cppfrance.com/code.aspx?ID=28571
- http://www.laboratoire-microsoft.org/articles/dev/dll/1/

Normalement sa devrait bien t'aider, c'est simple et d'approche facile.

@++

"Avant même de fonctionner, tout programme est déjà obsolète."
0
Rejoignez-nous