begin process at 2012 02 12 10:40:15
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Modules

 > EXPORTER DES FONCTIONS DANS UNE DLL VB6 ADDIN

EXPORTER DES FONCTIONS DANS UNE DLL VB6 ADDIN


 Information sur la source

Note :
9,33 / 10 - par 3 personnes
9,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Modules Niveau :Débutant Date de création :07/01/2004 Vu / téléchargé :10 459 / 1 160

Auteur : EBArtSoft

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (30)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
Ce code vous permet d'exporter des fonctions a partir d'une
dll activex comme on peut le faire simplement avec le c++
par exemple ça ce presente sous la forme d'un addin
vous créez un nouveau projet du type dll-activex
vous ajoutez un module deux trois fonctions "public"
vous compilez et le tour est joué !

J'ai inclut un exemple simple


 Conclusion

j'ai repris l'idée du hook dll par John Chamberlain pour créer mon propre
addin j'encourage tout ceux qui ce sente capable a créer de nouvelle
fonction a vb... qui de toute façon vas disparaitre un jour, comme
BruNews me le rappel constament ! lol

@+

Tient il serais bien pretique d'ajouter une rubrique ADDIN dans les categorie...

 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


 Sources du même auteur

Source avec Zip Source avec une capture COLOR PICKER
Source avec Zip Source avec une capture SAVEPICTURE() AU FORMAT PNG, JPG, TIF ETC...
Source avec Zip Source avec une capture SAUVEGARDER UNE IMAGE EN PNG
Source avec Zip Source avec une capture VB6 ADDIN - FAITES DISPARAITRE LES MSGBOX D'ERREUR IDE
Source avec Zip Source avec une capture MONITEUR CPU

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) CRYPTAGE ET DECRYPTAGE par jerichez
Source avec Zip Source avec une capture Source .NET (Dotnet) EXEMPLE MODBUS POUR MODULES ADAM, BECKHOFF, WAGO par mnmsjaune
Source avec Zip Source .NET (Dotnet) CRÉER SON PROPRE DESIGNER COMME CELUI DE VISUAL STUDIO par ShareVB
Source avec Zip Source .NET (Dotnet) CONVERSION UTM VERS LAT/LONG par BarresLTD
Source avec Zip CPROPGROUP : COLLECTION FAITE MAISON par Flocreate

Commentaires et avis

Commentaire de BruNews le 07/01/2004 23:06:36 administrateur CS

Salut,
ce pauvre VB, il en aura vu de toutes les couleurs avec toi.

Commentaire de max12 le 08/01/2004 00:56:11 administrateur CS

Si tu continu comme sa je vais finir par te donner un gros bizou :P

Commentaire de lumesh le 08/01/2004 06:09:36

Tient il serais bien pretique d'ajouter une rubrique ADDIN dans les categorie...      <- qui disparaitera avec vb6  ;) ;) ;) ;)

Commentaire de shadowmoy le 08/01/2004 07:56:16

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/

Commentaire de EBArtSoft le 08/01/2004 09:49:07 administrateur CS

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é !

@+

Commentaire de NoFutur le 08/01/2004 15:28:57

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 !

Commentaire de shadowmoy le 08/01/2004 18:11:58

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 :)  ?

Commentaire de EBArtSoft le 08/01/2004 18:28:38 administrateur CS

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

@+

Commentaire de Afyn le 09/01/2004 11:52:27

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

Commentaire de FAS le 09/01/2004 22:56:29

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

Commentaire de benzinafouad le 04/03/2004 12:51:27

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.

Commentaire de azerty25 le 25/05/2004 22:24:18

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 :(

Commentaire de EBArtSoft le 26/05/2004 07:38:25 administrateur CS

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

@+

Commentaire de azerty25 le 26/05/2004 07:58:36

Ah ok, je ne savai pas. Mais il y a un autre probleme c'est que je ne sais pas faire des tlb :(

Commentaire de Afyn le 26/05/2004 10:46:17

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

Commentaire de azerty25 le 26/05/2004 12:43:26

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 :(

Commentaire de EBArtSoft le 26/05/2004 13:21:43 administrateur CS

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...

@+

Commentaire de azerty25 le 26/05/2004 17:17:56

hmm, merci pour l'info, reste plus qu'a trouver comment faire des tlb maintenant ;)

Commentaire de azerty25 le 26/05/2004 21:00:40

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 :(

Commentaire de EBArtSoft le 26/05/2004 21:53:37 administrateur CS

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

@+

Commentaire de azerty25 le 27/05/2004 20:36:41

Ca fonctionne parfaitement, je te remercie beaucoup pour ton aide. par contre, c'est pas vbFromUnicode qu'il faut mettre mais vbUnicode ;)

Commentaire de azerty25 le 30/05/2004 06:56:30

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 :(

Commentaire de sinouhe17 le 08/06/2004 09:34:17

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.

Commentaire de azerty25 le 02/07/2004 14:54:17

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 ?

Commentaire de Fabio972 le 15/09/2004 14:21:53

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 ?)

Commentaire de Fabio972 le 15/09/2004 14:47:52

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.

Commentaire de Fabio972 le 15/09/2004 14:58:07

J'ai trouvé :
http://www.vbfrance.com/code.aspx?ID=7785

Merci EB pour ces bons softs !!!

Commentaire de ydx35 le 20/10/2004 10:10:11

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

Commentaire de ania le 07/08/2005 00:15:26

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

Commentaire de le pop etre le 06/01/2006 17:42:11

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

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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 : 3,557 sec (3)

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