EXPORTER DES FONCTIONS DANS UNE DLL VB6 ADDIN

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 7 janv. 2004 à 23:06
le pop etre Messages postés 8 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 5 avril 2008 - 6 janv. 2006 à 17:42
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/19357-exporter-des-fonctions-dans-une-dll-vb6-addin

le pop etre Messages postés 8 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 5 avril 2008
6 janv. 2006 à 17:42
premièrement merci a toi EBartSoft pour cette source.... Elle va m'etre très précieuse.

pour toi ania
si XL et access plante c'est simple... tu dois avoir garder les appels de fonction de dll VB:

préalablement : éditeurVBA/outils/références/parcourir/madll.dll

puis
________________

option explicit

public function mon_nom_a_changer()as 'type
Call mafonction
mon_nom_a_changer = mafonction
end function
________________
dans ton module

maintenant, avec les dll produites par l'intermédiaire de l'addin de EBartSoft, ton module s'écrit tel que :
________________
option explicit

Declare Function mafonction Lib "*\madll.dll" Alias "mon_nom_a_changer" () As 'type
________________



bien évidemment tu peu te passer du changement de nom, mais des fois ça sert à utiliser le même appel de fonction avec des dll différentes mais conditionnées (ou choisie préalablement).

Ex :
54 molliers différent ->
54 formules température_de_saturation(pression_de_saturation)

dans ce cas le changement de nom te permet de choisir parmis l'un ou l'autre des molliers, par lecture d'un .txt ou autre élément logiciel; mon rève profond du moment serais de pouvoir écrire et lire dans la partie logiciel/fichier/propriétés/commentaire du fichier enregistré, ou le module est utilisé.

Si EBartSoft toi ou un autre lecteur de ce forum ayez un conseil.

Bien cordialement

la PopO
cs_ania Messages postés 4 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 7 août 2005
7 août 2005 à 00:15
Bonjour,

Est-ce que ca devrait marcher quand on appelle les fcts de la DLL depuis XL/VBA ?
Ca me fait planter XL (et ACCESS aussi) ...
Dans VB6, ca marche impec.
Benoit
ydx35 Messages postés 8 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 19 octobre 2005
20 oct. 2004 à 10:10
Bonjour,

Je soutiens A DONF l'idée d'une rubrique Add-ins de VB6 !

Venant des C/C++ (Unix et Borland !) je repasse par VB6 / VBA avant de migrer (peut-etre) vers VB.NET

Vues totues les lacues de votre produit favori (et contraint pour moi), je ne peux qu'encourager mon site de reference....
Yann
Fabio972 Messages postés 62 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 4 août 2004
15 sept. 2004 à 14:58
J'ai trouvé :
http://www.vbfrance.com/code.aspx?ID=7785

Merci EB pour ces bons softs !!!
Fabio972 Messages postés 62 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 4 août 2004
15 sept. 2004 à 14:47
Dis EB, où trouver ce API Browser sur la capture ?!?
Ce serait bien pratique pour voir justement les fonctions exporter.

Sous NT je ne connais que Quickview et je ne sais aps si il passe sous XP.
Fabio972 Messages postés 62 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 4 août 2004
15 sept. 2004 à 14:21
BRAVO !!! SUBLIME !!! MAGNIFIQUE !!!
J'ai cherché longtemps sur le net comment exporter ces fonctions d'un .dll depuis VB.

N'ayant jamais fais de .dll avant, ce sont les autres codeurs qui m'ont signalé que mes fonctinos n'étaient pas exportées.

Maintenant elle le sont en quelques clicks et c'est génial (par contre elles ne fonctionnent pas de l'autre côté mais c'est un autre problème) !!!

!!! MERCI BEAUCOUP EB !!!
10 évidemment (d'ailleurs, comment se fait-ce qu'elle ne siot pas noté cette merveilleuse source ?)
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
2 juil. 2004 à 14:54
Un autre probleme, quand j'ai une routine dans un module (celle qui va servir "d'API") et que celle ci fait apparaitre avec show, une fenetre qui est dans le meme projet (activeX dll), alors l'éxécutable (idem sous l'IDE) qui appelle l'API plante. Tu aurai une solution stp ?
sinouhe17 Messages postés 1 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 8 juin 2004
8 juin 2004 à 09:34
Super source. Moi j'appelle les fct de la DLL depuis XL/VBA.
Mais j'ai le problème de l'UNICODE. J'ai bien compris qu'il pourrait y avoir une solution avec les TLB mais j'y arrive pas....
Si on dit que j'ai une fonction foo(string s) as string exportée, il semble qu'il y ai une conversion en UNICODE qq part. En effet, à l'appel, foo("toto") au niveau XL/VBA j'ai bien une chaine ANSI mais à reception dans la fct, s est en unicode.... QQun sait comment rester en ANSI partout ?
d'avance merci.
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
30 mai 2004 à 06:56
J'ai remarqué un autre probleme, par exemple avec la source http://www.vbfrance.com/code.aspx?ID=21044, quand on quitte le programme, de retour dans l'ide, on a une ptite flopée de permission denied :(
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
27 mai 2004 à 20:36
Ca fonctionne parfaitement, je te remercie beaucoup pour ton aide. par contre, c'est pas vbFromUnicode qu'il faut mettre mais vbUnicode ;)
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
26 mai 2004 à 21:53
Ok essaie ceci :

une dll activex avec export de la fonction :
public sub msg(byval wMsg as string )

un exe standard avec reference projet1 (dll activex)
declare private/public sub msg lib "projet1.dll" (byval wMsg as string)

lors de l'appel fait :

a$ = "Mon Message"
b$ = StrConv(a$,vbFromUnicode)
msg b$

voici qui resoud ton probleme (certe plus long du fait de StrConv)
mais point de depart pour une solution concrete

@+
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
26 mai 2004 à 21:00
Alors, je vais t'expliquer ce qui résulte de mes qq recherches et de mes manips. J'ai, dans mon projet de DLL, dans ses propriétés, composants, coché remote server files (eh oui, j'ai version anglaise, j'espere que ça n'a pas d'influence sur ton code), j'ai activé le bouton vert de ton addin, activé les fonctions (dont celle qui pose probleme est : Public Sub msg(chaine As String)
MsgBox chaine
End Sub
)
, puis compilé. Ensuite, j'ai fait un nouveau projet standard, j'ai mis en référence le tlb crée lors de la compil de la DLL, j'ai ensuite déclaré la sub (Private Declare Sub msg Lib "dll" (chaine As String)), puis appele la sub dans un bouton par msg "coucou".
Mais j'ai toujours le probleme des points d'interrogation :(
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
26 mai 2004 à 17:17
hmm, merci pour l'info, reste plus qu'a trouver comment faire des tlb maintenant ;)
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
26 mai 2004 à 13:21
azerty>

UNICODE > ANSI : a$ = StrConv(b$,vbFromUnicode)
ANSI > UNICODE: b$ = StrConv(a$,vbUnicode)

pour info une chaine :

ANSI = "A" & "B" & "C" & "D" & Chr$(0)
(Codage sur 1 octet 256 caracteres)

UNICODE = "A" & chr$(0) & "B" & chr$(0) & chr$(0) & chr$(0)
(Codage sur 2 octets 65536 caracteres)

c'est pas plus compliqué que ça...

@+
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
26 mai 2004 à 12:43
En effet, je vais en avoir besoin. Mais je sais déja pas trop ce que c'est des TLB, et par dessus, j'ai aucune idée de comment convertir des AINSI en Unicode :(
Afyn Messages postés 608 Date d'inscription samedi 3 août 2002 Statut Membre Dernière intervention 22 décembre 2016
26 mai 2004 à 10:46
Tu pénétres (sans jeu de mots) dans le Royaume d'EB...
Asm et TLB seront les 2 mamelles de tes progrés...

Si tu regardes la Liste des Codes d'EB, tu trouveras de koi faire
des TLB's. Ou alors Tape TLB ds le moteur de recherche de VBFrance.

Bon courage.

Afyn
Navedac
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
26 mai 2004 à 07:58
Ah ok, je ne savai pas. Mais il y a un autre probleme c'est que je ne sais pas faire des tlb :(
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
26 mai 2004 à 07:38
azerty> Ce n'est pas un probleme et il n'y a rien d'etrange...
ce qu'il se passe c'est que tu declare ta fonction dans un module vb
par consequent ta fonction attend pour tout argument string une
chaine de type ANSI alors que vb traite des chaines Unicode
c'est pour cela que ton message indique des ????. pour resoudre
ce probleme crée une typlib (tlb) avec les declarations de ta dll
ce qui forcera vb a ne pas convertir unicode>ansi avant l'appel

@+
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
25 mai 2004 à 22:24
Un probleme à signaler, lorsque je fait une sub dans la DLL, et que j'essaye de l'appeller depuis une form d'un autre projet, sub de la DLL qui a un argument en string, et qui affiche une msgbox avec le texte en parametre, la msgbox apparait bien, mais le texte qui devrait s'afficher est "???" ! Un peu étrange :(
benzinafouad Messages postés 25 Date d'inscription jeudi 15 août 2002 Statut Membre Dernière intervention 21 juillet 2004
4 mars 2004 à 12:51
Merçi Beaucoup

Mais il reste comme même un probleme, c'est que si je créee une procédure, ou une Fonction, stockée dans une DLL et qui permet d'ouvrir un form, Vb6.exe genere une erreur et s'arrete complètement.

Encore Un problème : Si j'utilise un objet comme DAO 3.6 dans le MOdule, la fonction ne réagie plus.
cs_FAS Messages postés 88 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 24 février 2006
9 janv. 2004 à 22:56
Vraiment, BRAVO!

C'est ce que je cherchais à faire depuis longtemps! Je vois tellement de codes exceptionnels ces temps-ci que j'hésite à revenir sous VB6.

;)

FAS
Afyn Messages postés 608 Date d'inscription samedi 3 août 2002 Statut Membre Dernière intervention 22 décembre 2016
9 janv. 2004 à 11:52
Puis je me permettre encore un encouragement !

Le temps que tu passes sur VB et en asm doit être phénoménal.

Pourrais tu par exemple faire un petit prog qui montre les différences de performances entre un appel conventionnel et un appel amélioré par tes soins.
Et expliquer les situations ou c'est vraiment utile d'utilser telle ou telle méthode.

Merci d'avance.

Afyn
Navedac
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
8 janv. 2004 à 18:28
en gros OUI !

mais il faut imperativement respecter la convention d'appel de
la dll c'est a dire tu ne pourras pas utiliser tes fonctions dans
un exe en vc++ mais "seulement" a partir d'un autre exe/projet
vb...

Couplé avec un .tlb le gain de temps est non negligeable
tout depend bien entendu de l'usage et de la qualité du code

J'ai deja reperé plusieurs bug ou conflit se terminant par un
"Exception handler" que je tente de corriger le plus gros
probleme vient de la verification de la pile que vb execute
au debut de certaine procedure... bref c'est pas gagné encore

Mais l'interet ne s'arrete pas a ce seul detail, j'ai encore
pleins d'idées a develloper sur le sujet, c'est a suivre...

signé : unaM(ed) ! lol

@+
shadowmoy Messages postés 340 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 25 août 2007
8 janv. 2004 à 18:11
en gros ca permet de creer des dll comme celle du c++ si j'ai bien compris :op c'est clair c'est super cool mais y a t'il un reel gain de performances par rapport à une dll activex ?
hein Manu :) ?
cs_NoFutur Messages postés 171 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 6 mai 2007 1
8 janv. 2004 à 15:28
VB qui disparait c'est comme dire que la cassette Audio ne sera plus alors qu'ils en vendent toujours malgré les dvd et autres mini-disc :o)

Et puis si il disparait que deviendra VB-France hein zavé pensez à ça :'(

Bonne continuation !
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
8 janv. 2004 à 09:49
shadomoy> l'interet par rapport a un "simple" referencement de ta dll
activex c'est justement que tu n'utilise pas d'activex grace a cette technique ta dll est chargé en memoire comme n'importe quel autre
dll mais surtout lorsque tu appel une fonction vb ne crée par un
nouvel espace memoire pour une classe et appel directement ta fonction par un call.

tu doit donc declarer tes fonctions comme le module kernel par exemple :

declare function mafonction lib "madll.dll" (byval mesarguments as long) as long

cela te permet egalement de partager les fonctions que tu utilise souvent sans reecrire le code "module" de tes programmes
(ce qui est la base meme d'une dll et qui est un mis de coté avec
les modules de classe)

bref les applications sont multiple, pour ce qui est de l'utilisation
voici les instructions :

- dezziper defaddin.dll (ou compiler la a partir du projet)
- faire regsvr32 defaddin.dll
- lancez vb6
- cliquez sur gestionnaire de complement
- ajoutez "ebartsoft@ dll function exoporter"
- creez un nouveau projet du type dll activex
- ajoutez un module "standard"
- ajoutez qlq fonctions public
- activez l'addin en cliquant sur le switch rouge
- activez egalement les fonctions a exporter en cliquant sur les croix
- puis compilez le projet
- ... la dll est creé !

@+
shadowmoy Messages postés 340 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 25 août 2007
8 janv. 2004 à 07:56
c'est koi l'interet par rapport a un simple referencement de ta dll activex dans le projet ?

merci de ta reponse :p (pasque j'ai pas capté la)

puis met une lisez moi avec la procedure a suivre pasque j'ai pas reussi a lancer le plugin dans l'ide :o/
lumesh Messages postés 564 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 7 novembre 2008
8 janv. 2004 à 06:09
Tient il serais bien pretique d'ajouter une rubrique ADDIN dans les categorie... <- qui disparaitera avec vb6 ;) ;) ;) ;)
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
8 janv. 2004 à 00:56
Si tu continu comme sa je vais finir par te donner un gros bizou :P
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 janv. 2004 à 23:06
Salut,
ce pauvre VB, il en aura vu de toutes les couleurs avec toi.
Rejoignez-nous