DLL - DÉBUTANT PAR ICI ! ! !

GuilleW Messages postés 118 Date d'inscription vendredi 18 avril 2003 Statut Membre Dernière intervention 28 décembre 2006 - 18 avril 2005 à 15:56
cs_ABF Messages postés 227 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 26 avril 2012 - 22 mai 2008 à 12:46
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/30828-dll-debutant-par-ici

cs_ABF Messages postés 227 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 26 avril 2012
22 mai 2008 à 12:46
/!\ COCHER la comptabilité binaire avant de lancer et de créer la dll sinon elle va etre belle la bdr

Pas mal sinon ;)

++
infoamz Messages postés 4 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 23 août 2006
25 mai 2006 à 17:00
code tres simple mais efficace merci bien
GuilleW Messages postés 118 Date d'inscription vendredi 18 avril 2003 Statut Membre Dernière intervention 28 décembre 2006
14 nov. 2005 à 16:39
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
cs_andrebernard Messages postés 404 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 4 septembre 2013 1
11 nov. 2005 à 08:22
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.
mosa54 Messages postés 1 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 13 juillet 2005
13 juil. 2005 à 15:01
merci pour ces informations
fakfat Messages postés 2 Date d'inscription dimanche 22 août 2004 Statut Membre Dernière intervention 17 mars 2006
19 juin 2005 à 22:50
merci c'est bien pour un debutant
mbaoyone Messages postés 5 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 28 mai 2005
28 mai 2005 à 23:47
c gentil! pou moi, Guillew! Promis, c'était mon dernier comment. Salut
GuilleW Messages postés 118 Date d'inscription vendredi 18 avril 2003 Statut Membre Dernière intervention 28 décembre 2006
28 mai 2005 à 02:15
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
mbaoyone Messages postés 5 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 28 mai 2005
27 mai 2005 à 00:08
J'ajouterais simplement merci pour toutes ces infos, je ne suis pas du domaine, mais +2 pour l'ambiance sur ce euh... forum. ciao!
cerf_volant Messages postés 4 Date d'inscription mercredi 30 juin 2004 Statut Membre Dernière intervention 5 mai 2005
5 mai 2005 à 17:52
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...
kalobit Messages postés 169 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 7 avril 2008 2
5 mai 2005 à 14:54
Au passage :

Library signifie bibliothèque et non librairie (qui se dit book shop) :)
Silmon Messages postés 85 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 7 mai 2007
5 mai 2005 à 14:28
Merci Vatoo et cerf_volant

et pour les inconvénients?
cerf_volant Messages postés 4 Date d'inscription mercredi 30 juin 2004 Statut Membre Dernière intervention 5 mai 2005
5 mai 2005 à 12:36
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.
cs_vatoo Messages postés 55 Date d'inscription mardi 29 mai 2001 Statut Membre Dernière intervention 1 juillet 2005
3 mai 2005 à 17:58
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 ...
Silmon Messages postés 85 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 7 mai 2007
3 mai 2005 à 15:14
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
cs_Ricou13 Messages postés 40 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 8 septembre 2006
29 avril 2005 à 18:07
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.
GuilleW Messages postés 118 Date d'inscription vendredi 18 avril 2003 Statut Membre Dernière intervention 28 décembre 2006
29 avril 2005 à 11:30
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.
cs_Ricou13 Messages postés 40 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 8 septembre 2006
28 avril 2005 à 22:00
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 ?
cerf_volant Messages postés 4 Date d'inscription mercredi 30 juin 2004 Statut Membre Dernière intervention 5 mai 2005
26 avril 2005 à 11:09
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 ;)
BZY1 Messages postés 214 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 12 avril 2008
25 avril 2005 à 11:23
merci pour ton code et toute ces expliquations ca va surement m'aider a+
GuilleW Messages postés 118 Date d'inscription vendredi 18 avril 2003 Statut Membre Dernière intervention 28 décembre 2006
22 avril 2005 à 02:30
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
soldier8514 Messages postés 295 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 24 janvier 2014 1
21 avril 2005 à 14:57
surement par ce quil sagit dun code executable lol
NikoGJ Messages postés 13 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 21 avril 2005
21 avril 2005 à 14:51
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?)
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
20 avril 2005 à 17:21
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.
soldier8514 Messages postés 295 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 24 janvier 2014 1
19 avril 2005 à 22:34
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 ;)
cs_NISANDSYSTEMS Messages postés 178 Date d'inscription vendredi 1 novembre 2002 Statut Membre Dernière intervention 9 janvier 2010
19 avril 2005 à 19:31
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
cs_vatoo Messages postés 55 Date d'inscription mardi 29 mai 2001 Statut Membre Dernière intervention 1 juillet 2005
19 avril 2005 à 14:49
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 ...
GuilleW Messages postés 118 Date d'inscription vendredi 18 avril 2003 Statut Membre Dernière intervention 28 décembre 2006
19 avril 2005 à 13:47
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 :)
cs_NISANDSYSTEMS Messages postés 178 Date d'inscription vendredi 1 novembre 2002 Statut Membre Dernière intervention 9 janvier 2010
19 avril 2005 à 12:04
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.
cs_vatoo Messages postés 55 Date d'inscription mardi 29 mai 2001 Statut Membre Dernière intervention 1 juillet 2005
19 avril 2005 à 08:47
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...
GuilleW Messages postés 118 Date d'inscription vendredi 18 avril 2003 Statut Membre Dernière intervention 28 décembre 2006
19 avril 2005 à 00:47
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 !
jrbleboss Messages postés 480 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 3 septembre 2007 1
18 avril 2005 à 20:20
C'est bien pour un débutant.

Je vais voir le code.

JRB
cs_NISANDSYSTEMS Messages postés 178 Date d'inscription vendredi 1 novembre 2002 Statut Membre Dernière intervention 9 janvier 2010
18 avril 2005 à 17:23
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
cs_vatoo Messages postés 55 Date d'inscription mardi 29 mai 2001 Statut Membre Dernière intervention 1 juillet 2005
18 avril 2005 à 16:40
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
roottoto Messages postés 6 Date d'inscription lundi 13 janvier 2003 Statut Membre Dernière intervention 18 avril 2005
18 avril 2005 à 16:39
& app.path &
GuilleW Messages postés 118 Date d'inscription vendredi 18 avril 2003 Statut Membre Dernière intervention 28 décembre 2006
18 avril 2005 à 15:56
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
Rejoignez-nous