begin process at 2012 05 27 19:56:57
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Tutoriaux

 > DLL - DÉBUTANT PAR ICI ! ! !

DLL - DÉBUTANT PAR ICI ! ! !


 Information sur la source

Note :
8,11 / 10 - par 9 personnes
8,11 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Tutoriaux Niveau :Débutant Date de création :18/04/2005 Date de mise à jour :22/04/2005 13:57:52 Vu / téléchargé :31 078 / 5 639

Auteur : GuilleW

Ecrire un message privé
Commentaire sur cette source (36)
Ajouter un commentaire et/ou une note

 Description

Hello, aprés avoir tourné pendant 2 jours à la recherche d'un code simple expliquant comment on utilise une ( ou un , mais j'aime bien dire une :p ) DLL,  ou qui explique ce qu'est une dll je m'en va faire le resultat de mes petites recherches. Attention : Ceci est la source d'un débutant pour les débutants !
Expert, Go away :p

Pour commencer une dll sert à faire des bibliotheques de fonction par exemple un dll qui permet :
- d'ecrire un fichier texte
- lire un fichier texte
- effacer un fichier texte

Ces trois fonctions sont ecrite dans le même fichier, on fait appelle à ce dernier et on appelle juste la fonction désire avec un code plus simple du style :
ecrire "Toto.txt", "mon text qui est ecrit dans le fichier toto :) "

C'est beaucoup plus commode de faire appelle à une fonction que de retapper à chaque fois le code pour un action.

Dans le zip, il y a deux dossier l'un montre un exemple pour creer une dll la plus simple du monde ( ba oui c'est bien beau de mettre des source bourée à mort , mais lorsque l'on souhaite comprend 3 ligne bouré de variable on doit tout relire pour comprendre :p )

Puis une source pour faire apelle à une dll et lancer l'une des fonction dedans.

ATTENTION : je ne connais pas encore le moyen de faire appelle à une dll de maniere relatif
donc le fichier est appellé de manière absolue soit : C:\mon_dossier\.....

Or sur votre ordi vous n'aurrez pas la dll au meme endroit que moi, il faut donc procéder de la maniere suivant lors du lancement du fichier : "appeler la dll"
- aller dans "Projet"
- descender jusqu'à "Référence"
- Cliquer sur "parcourir"
- donner le chemin ou se situe la dll

Voila vous saver comment creer une bibliotheque de function, et vous savez comment incorporer des .dll à vos .exe :)


 Conclusion

Je post cette source sans prétention, seulement j'ai trouvé peu de source expliquant comment creer une dll et la gérer. En tant que débutant je m'y suis paumé, mon seul but est d'aider d'autres debutant qui essai de comprendre comme moi les dll

Moi suis content je vient juste de comprendre :p

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

22 avril 2005 13:57:52 :
Merci a tous pour votre Aide ! ! ! J'ai mis à jour le Zip, le lien n'est plus fait de maniere "Référenciel" mais relatif ( j'aime pas les assistant, j'aime bien savoir où est où :) ) Et apparement cela fonctionne lorsque l'on deplace les fichier . exe avec leur dll donc ça à l'air de fonctionner !

 Sources de la même categorie

ENUM TYPE POUR JAVASCCRIPT par triumphs
Source avec Zip DLL PERSONNALISÉ AVEC ÉVÈNEMENTS ET PROPRIÉTÉS EN VB6. par Number7
Source avec Zip Source .NET (Dotnet) EXEMPLE DU TUTORAIL "CLASSES MÉTIER" par Adn56
Source avec Zip Source avec une capture Source .NET (Dotnet) GESTION DES LISTES : RANGEMENT (LIST.SORT) ET FILTRAGE (LIST... par kbalist
Source avec Zip EXEMPLE SUR LES MENUS POUR AIDER LES DÉBUTANTS COMME MOI ;-) par viragoloco

Commentaires et avis

Commentaire de GuilleW le 18/04/2005 15:56:44

J'aimerai savoir si quelqu'un connait le moyen de faire appelle à une dll en chemin relatif. Par exemple si la dll se trouve dans le repertoire du .exe, comment faire pour que lors de l'empactement il reste dans le dossier du .exe sans qu'il nous resorte une erreur chez l'utilisateur. Merci.

GuilleW

Commentaire de roottoto le 18/04/2005 16:39:04

& app.path &

Commentaire de vatoo le 18/04/2005 16:40:11

Boaf alors ca c'est pas faisable avec ta méthode, enfin pas exactement.

Pour vb, une dll (enfin du type com32, celle que tu utilise) est un objet, une "classe". Par exemple, pour une dll dont le nom de projet sera montexte, ce sera la classe montexte.

Lorsque tu ajoute une référence, il recherche la dll associée dans la base de registre. Cela nécessite d'avoir enregistré la dll (le célèbre regsvr32) afin que celle-ci ajoute dans la base de registre l'information : youhou, c'est moi, pour des infos sur montexte, c'est par ici.

Ta méthode nécessite de créer ce lien dans la base de registre dynamiquement. Mais alors, tu ne "voit" pas les objets que tu manipules puisqu'ils sont plus dans les références ...

Il faut utiliser quelques astuces ... :

En fait, la technique serait celle la :
Pendant tout ton développement, tu utilises ta méthode.
Mais tu fais bien attention a avoir un objet lié à la dll, même si c'est juste pour des méthodes.
Par exemple : dim truc as new montexte
truc.ecristexte("ahahah")
Etc ...
Ainsi, tu gardes les informations fournies par la référence.

A la fin, tu supprimes la référence, et tu rajoute à la place du dim plus haut :
dim truc as object
set truc = createobject("montexte")

Comme ca, il ira chercher dynamiquement l'information dans la base de registre... Il te reste plus qu'à ajouter avant le "createobject" une procédure qui enregistre (regsvr) la dll dans le répertoire. C'est par exemple faisable avec l'option /s (silent) de regsvr32...

Un exemple ici :
dim truc as object
shell "regsvr32 /s montexte.dll"
set truc=createobject("montexte")

Voila..
On peut faire ensuite un peu plus élégant, avec de l'héritage pour que la dll transmette la liste des objets (classes, ici montexte) qu'elle contient, il suffit qu'elle ait une méthode fixe...

Plus d'infos sur le premier programme que j'ai fait qui gérait ca ... :
http://www.vbfrance.com/code.aspx?ID=6010

Voila ...
Mon dernier prog gérant ca est directxperience, sur http://membres.lycos.fr/vnsoftware/

Tchaou

Commentaire de NISANDSYSTEMS le 18/04/2005 17:23:20

Pas tout à fait daccord avec toi Vatoo.
Pas besoin de creer un CreateObject pour manipuler la dll meme sur exe deployé.
Le createobject est plus lent.

@+
Nisand-Systems

Commentaire de jrbleboss le 18/04/2005 20:20:07

C'est bien pour un débutant.

Je vais voir le code.

JRB

Commentaire de GuilleW le 19/04/2005 00:47:16

Heu donc , si m'a dll est dans le meme dossier que mon .exe je fait comment ? :p Vous vous contredisez tous, je comprend plus rien ;)

Merci, beaucoups pour votre aide !

Commentaire de vatoo le 19/04/2005 08:47:30

Je maintiens mon opinion NISAND, même si createobject peut paraitre plus lent, c'est le seul moyen de ne pas utiliser de référence.

C'est vrai qu'ici, il peut utiliser une référence, et s'il regsvr32 son dll dans le chemin de l'application, alors ca fonctionnera. Mais il ne pourra pas regsvrer dans l'application, puisque au début, si elle trouve pas la référence, elle se lancera pas.
Ensuite, l'interêt du createobject est qu'il permet d'ajouter dynamiquement des dll. Par exemple, il peut ainsi gérer un nombre quelconque de plugins, il suffit de les copier dedans...

Commentaire de NISANDSYSTEMS le 19/04/2005 12:04:50

Daccord sur le principe de travailler dans l'ide sans faire appel niveau à la reference pour une dll.

Mais reellement pas pratique du tout lors d'un deploiement a part bien sur l'interet que porte la dll dans l'application.

Commentaire de GuilleW le 19/04/2005 13:47:59

Heu , je suis toujour là ! ! ! :p :p :p

Donc justement lors d'un deploiement, si la personne l'install dans un dossier X, je connais juste le chemin relatif de la dll par rapport à mon .exe , comment faire ?

pourquoi IL font toujours des code super compliquer au lieu de faire juste un :
shell "regsvr32 /s ./DOssier_dll/Nom_de_la_DLL.dll"

voilà, si vous pouvez me donner la source necessaire à cette action :p
Merki :)

Commentaire de vatoo le 19/04/2005 14:49:43

Nisand, pour moi, bosser avec la dll en référence me gene pas. En fait ma technique est la seule que j'ai trouvée pour ajouter dynamiquement des dll "vbasic" (com) à une application. Si par exemple je veux gérer des plugins, ma méthode le permet. Alors qu'un plugin développé après ne peut sinon etre ajouté aux références, à moins de recompiler l'application ...

Pour GuilleW : je te dis que la méthode shell/regsvr32 que tu donnes fonctionne bien. C'est juste que la majorité des programmeurs aiment se tourner la tete et mettre le code complet pour éviter d'avoir à passer par un programme externe qui n'existera peut etre plus (ou pas avec le meme nom) dans les prochaines versions de windows.

Le problème est qu'un regsvr32 dans ton programme fonctionnera, mais si tu mets la dll en référence du programme, il ne pourra pas se lancer tant que le regsvr32 n'a pas été fait ... Il pourra donc pas autofaire le regsvr32. La solution est sinon de faire un loader : le programme lancé exécute un regsvr32, puis lance un autre exe. L'autre exe est le code principal, qui enfin sera lancé avec les dll référencées correctement.

Il faut quand meme savoir que la majorité des programmes d'installation (meme tous) sont capable d'enregistrer une dll... Voila pourquoi il est souvent préférable d'avoir un programme d'instal, et pas un bete exe dans un bete zip... enfin avec vb en tout cas ...

Commentaire de NISANDSYSTEMS le 19/04/2005 19:31:44

Entierement daccord Vatoo sur le principed'un deploiement via un programme externe pour l'installationde l'exe.
Facile le travail des enregistrements...

Petite suggestion, sur un exe standard en mode main,
tu te creés une petite gestion par un fichier bat pour l enregistrement dll & ocx et une fois inscrite, lancement del'exe.


@+ Nisand-Systems




Commentaire de soldier8514 le 19/04/2005 22:34:31

GuilleW << c'est du très bon boulot // je te propose d'approfondir tout ça avec cet exellent article sur la creation des dll ainsi que leur utilisation sous vc++ et vb   ;)

http://www.codeproject.com/dll/XDllPt1.asp

tu vas te régaler ... ++  bonne continuation ;)

Commentaire de tbbuim1 le 20/04/2005 17:21:04

Bon c'est pas pour dire, mais je trouve que vous vous prenez la tête un peu pour rien lol Bon c'est vrai ya référencer against the no référencer, but we need the no to win the yes... lol Bref, pourquoi ne pas faire un package d'install, ainsi on peut déployer son appli partout et le package installera le lien dynamique de la librairie (donc LE dll, car c'est un lien et un lien c'est masculin :p)  automatiquement. So, no souci... Après si on veut se prendre la tête et juste copier son exe et son dll, on peut faire comme Vatoo, ou mm pourquoi pas, faire un prog d'install de la dll qui se lancerait uniquement au premier lancement de l'appli, puisque vous aimez les prises de tête lol. en tout cas, thx pour ce ptit exemple dude, ma foi, fort utile pour les débutants.

Commentaire de NikoGJ le 21/04/2005 14:51:52

Bon travail Guille, je comprend un peu mieux comment marche une dll ^^

tbbuim:
A ce propos, DLL=Dynamic Link Library
==>"librairie de liens dynamiques", une librairie donc UNE dll.. :) (pourquoi un?)

Commentaire de soldier8514 le 21/04/2005 14:57:42

surement par ce quil sagit dun code executable lol  

Commentaire de GuilleW le 22/04/2005 02:30:49

Moi j'aime bien dire une :p
C'est tout ! ! !  Et puis y'a personne pour me coriger dans ma tete lorsque je pense " une " :p
Enfin, merci pour votre mobilisation ça m'aide pas mal dans mon développement !
GuilleW

Commentaire de BZY1 le 25/04/2005 11:23:04

merci pour ton code et toute ces expliquations ca va surement m'aider a+

Commentaire de cerf_volant le 26/04/2005 11:09:34

Bonjour, je me pose une question.
Ton programme est clair mais je n'ai jamais fait de DLL sous VB.
Toutes les dll que j'ai faites sont en C et je n'ai pas besoin d'appeler regsrv32 pour m'en servir.
Pouvez vous me dire comment accéder cette dll sans l'enregistrer, c'est juste pour comprendre.

pour info mes dll ecrites en C sous VC++, compilées en C (pas C++) je les déclare de cette façon:

Declare Function Toto Lib "maDLL.dll" Alias "_Toto@4" (valeur As Long) As Long

et je peux utiliser la fonction Toto directement dans le code.
D'où ma question.

PS: DLL=Dynamic Link Library (bibliothèque de liens dynamique) pas de doute, c'est une fille ;)

Commentaire de Ricou13 le 28/04/2005 22:00:08

Salut,

Question bête : si une dll ne contient que des fonctions, pourquoi ne pas utiliser un module ou une classe intégrés à l'exe ?

Quel est l'intêret de la dll ?

Commentaire de GuilleW le 29/04/2005 11:30:32

L'intéret est de créer une dll qui te sert à tel ou tel action puis de l'appeller dans tes programmes aprés sans avoir à tout réécrire ! par exemple une trés longue fonction de criptage ! tu fait apelle à la dll et pour tout tes programmes aprés tu a juste à faire un copier coller du fichier prés de ton programme et de faire apelle à lui !

Maintenant, expert à vous de nous dire si faire apelle à une dll est plus rapide que de faire des modules !
Merci.

Commentaire de Ricou13 le 29/04/2005 18:07:06

Je persiste mais j'ai créé une classe de cryptage/décryptage et lorsque je veux l'utiliser dans d'autres programmes, je fais un simple copier-coller du module.

Ce qui revient au même que le fait de copier-coller le fichier dll.

Commentaire de Silmon le 03/05/2005 15:14:32

Salut á tous.

Je ne suis pas trés fort en Dll.
J'utilise plutot des "linked files" ou fichiers partagés.
Ce sont des modules ouverts par plusieurs projects.
M'evitant ainsi de copier coller un bout de code.

Alors j'aimerais qu'on m'explique les avantages inconvenients
d'utiliser des dll plutot que des linked files,
au niveau rapidité, simplicité, execution etc...

Merci

Commentaire de vatoo le 03/05/2005 17:58:29

Yop ..

1 - Non, il n'est pas possible de faire une dll qui ne nécessite pas de regsvr32 en VB6, c'est ce qui en fait une faiblesse par rapport à vc++.
2 - L'avantage d'une dll par rapport à un module n'est pas dans la rapidité, mais principalement dans la réutilisation et dans la séparation des projets . Ainsi, lorsqu'on modifie par exemple la fonction de cryptage, pour faire accepter un autre type de cryptage, changer une boite de dialogue d'options de cryptage, etc..., il suffit de recompiler la dll avec comme option une compatibilité avec les versions précédentes, et de la mettre à jour pour ne pas avoir de problème .Ainsi, les dlls utilisées par windows se trouvent en un unique exemplaire (dans windows\system généralement), et une mise à jour de l'une (pour tenir compte de nouvelles fonctionnalités ou de bugs par exemple) se répercute automatiquement dans tous les prog. l'utilisant. Plus facile que d'avoir à compiler un énorme projet qui incluerait plusieurs modules. On sépare ainsi bien le logiciel des fonctionnalités annexes nécessaires (connexion à internet, utilisation de tel matériel, lecture de tel type de fichier, etc)..
VOili voilou ...

Commentaire de cerf_volant le 05/05/2005 12:36:04

Merci vatoo pour la réponse 1 :)
Pour la réponse 2 j'ajouterais que çà permet aussi de réduire la taille des executables puisque les fonctions communes à plusieurs programmes sont à part dans la ou les dll. Cà permet aussi de créer des fonctions (en C/C++ notamment) beaucoup plus rapides que VB qui peuvent ensuite etre appelées dans VB ou éventuellement dans un autre langage.

Commentaire de Silmon le 05/05/2005 14:28:36

Merci Vatoo et cerf_volant

et pour les inconvénients?

Commentaire de kalobit le 05/05/2005 14:54:06

Au passage :

Library signifie bibliothèque et non librairie (qui se dit book shop) :)

Commentaire de cerf_volant le 05/05/2005 17:52:07

pour les inconvénients (ceux que je connais du moins):
- il y a une légère perte de temps puisque tu appelles une fonction externe (donc lancement de la dll, appel de la fonction, mise en place des variables nécessaires dans la pile mémoire et les registres puis nettoyage après l'appel par le programme ou la dll selon la convention d'appel)
- il existe 3 conventions d'appel (géré lors de la compilation de la dll). Celà gère justement la pile mémoire et le renvoi des variables sur la pile, sa création et son nettoyage (stdcall obligatoire pour appeller une dll dans vb)
- pas de gestion des pointeurs en vb ni des structures en tant qu'arguments donc il faut parfois trouver des astuces ou compliquer la liste des arguments...

il faut donc mettre çà en balance avec les gains principaux:
- l'éventuel gain en rapidité dans le cas de certaines utilisations précises
- modularité
- réutilisabilité (intérêt principal)

par exemple, si tu fais de gros accès à des fichiers ou des calculs complexes, le C est plus adapté que VB.
Si tu crée un programme de calcul scientifique, une dll n'est intéressante que si tu compte la réutiliser ailleurs sinon tu perds du temps inutilement

autre cas particulier, tu peux créer une dll inteface compilée en stdcall qui appelle une dll compilée en cdecl permettant d'accéder à des fonctions contenues dans une dll que vb ne peut pas appeller directement.

Pour en savoir plus il faut se plonger dedans car là je résume, chaque cas est particulier...

Commentaire de mbaoyone le 27/05/2005 00:08:00

J'ajouterais simplement merci pour toutes ces infos, je ne suis pas du domaine, mais +2 pour l'ambiance sur ce euh... forum. ciao!

Commentaire de GuilleW le 28/05/2005 02:15:38

J'aimerai éviter les commentaires inutils pour faire (gagner ?) de la place sur le server de CSsource mais je tenais à remercier toute les personnes qui m'on renseigner grace à vous j'ai pu créer ceci :
http://ZoneZeus.free.fr
il s'agit d'un petit prog qui list les mangas traduit par la zeus team (pour ceux qui connaissent)  : et oui en gros féneant et attendant toujours la traduction des nouveaux mangas, j'ai creer un prog qui lit le codes sources de leurs pages web et donc qui me renseigne de la sorties des mangas.
Toutes mes excuses, loin de moi l'idée de faire de la pub ( :p ) mais il y a surtout à dispo la source en VB de chaques version. En tant que debutant qui demandait comment créer une dll, voici où j'en suis arrivé. Bref encore une fois, Merci :)
Bye les gens !
GuilleW

Commentaire de mbaoyone le 28/05/2005 23:47:46

c gentil! pou moi, Guillew! Promis, c'était mon dernier comment. Salut

Commentaire de fakfat le 19/06/2005 22:50:29

merci c'est bien pour un debutant

Commentaire de mosa54 le 13/07/2005 15:01:49

merci pour ces informations

Commentaire de andrebernard le 11/11/2005 08:22:30

Bonjour

Alors la, je suis liquide.
Je savais que j'etait un debutant, mais la je viens de me rendre compte grace à ce code que je suis carrement une "BURNE".
En effet le code a moins de 10 ligne, et je tiens à remercier GuilleW qui a essayé de faire ce que tres tres peu de developpeur font, donner un code réduit au strict minimum.
Le seul bemol est le manque de commentaires sur les lignes importantes.

Eh oui je sais y'en a que 2/3 mais, moi je suis ce que l'on appelle vraiment un debutant de chez debutant.
Car qd on est autodidacte meme dans ce cas, il n'est pas toujours facile de comprendre les mecanismes et grand principes de l'utilisation de DLL.

Bref, malgres toute votre aide je n'ai rien compris.

Ce que j'aimerais faire, c'est utiliser une DLL faite en PureBasic dans VB6.
Les DLL sont elles toutes égales lorsq'elle sont créées par des programmes differents ????
Car celle que j'ai créé en PureBasic aussi simple que celle de GuilleW ne marche pas avec vb.

En effet, apres Qbasic et vb6 depuis peu, je viens de decouvrir la puissance de ce language qui reuni simplicité et performance.
Et avec lui, appeller une dll c'est hyper simple (comme tout d'ailleurs).

Donc si quelqu'un pouvait tendre la main à un infirme de la programmation, je lui serais reconnaissant pendant au moins trois vies.

Merci à tous pour avoir eu la gentillesse de me lire.

Commentaire de GuilleW le 14/11/2005 16:39:05

hihii,
alors merci à tous pour les encouragements! Je post peu car j'y mais uniquement mes découvertes en cours d'aprentissage. Mais je penssais tout de même que c'était claire : andrebernard !
:p
bon courage à nous tous dans notre appretissage ( ba oui, suis comme vous, moi aussi j'suis débutant ! )

bye

Commentaire de infoamz le 25/05/2006 17:00:06

code tres simple mais efficace merci bien

Commentaire de ABF le 22/05/2008 12:46:47

/!\ COCHER la comptabilité binaire avant de lancer et de créer la dll sinon elle va etre belle la bdr

Pas mal sinon ;)

++

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,234 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales