granbapt
Messages postés20Date d'inscriptionjeudi 24 mai 2012StatutMembreDernière intervention27 septembre 2012
-
27 sept. 2012 à 21:28
NHenry
Messages postés15102Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention27 mars 2024
-
27 sept. 2012 à 23:19
Bonjour,
Je vais essayer d'exposer la situation et mon problème le plus clairement possible en espérant que quelqu'un puisse m'aider...
J'ai à ma disposition une dll créée à partir d'un code C, et je ne peux a priori modifier ni la dll ni le code C. Je souhaite utiliser les fonctions de cette dll dans excel via un code VBA.
Pour cela je déclare des SUB faisant appel à chaque fonction de la dll, puis je crée une fonction dans laquelle je fais un Call de ma SUB et je récupère le(s) résultat(s) voulus. J'espère avoir été assez précis.
Dans ma dll j'ai deux sortes de fonctions:
1. Les fonctions qui renvoient plusieurs résultats et qui sont définies de la manière suivante :
Je n'ai aucun mal à utiliser les fonctions de la première sorte puisque j'ai facilement accès aux résultats en passant par des ByRef, mais la deuxième sorte de fonctions je ne sais pas comment accéder au résultat puisqu'il est seulement renvoyé par un return./b
Voici la manière dont je procède en VBA :
premier type de fonction :
public type vect
r1 As Double
r2 As Double
end type
declare sub fonction1 Lib "nomdelaDLL" Alias "nomdelafonctiondanslaDLL" (ByVal parametre1 As Double,ByVal parametre2 As Double, ByVal parametre3 As Double, ByRef resultat1 As Double, ByRef resultat2 As Double)
public function nouvellefonction1(ByVal parametre1 As Double,ByVal parametre2 As Double, ByVal parametre3 As Double, ByRef resultat1 As Double, ByRef resultat2 As Double) As vect
Call fonction1(param1,param2,param3,res1,res2)
nouvellefonction1.r1=res1
nouvellefonction1.r2=res2
end function
et de meme pour le deuxieme type de fonction :
declare sub fonction2 Lib "nomdelaDLL" Alias "nomdelafonctiondanslaDLL" (ByVal parametre1 As Double,ByVal parametre2 As Double, ByVal parametre3 As Double)
public function nouvellefonction2(ByVal parametre1 As Double,ByVal parametre2 As Double, ByVal parametre3 As Double) As Double
Call fonction2(param1,param2,param3)
et c'est là que je bloque
end function
NHenry
Messages postés15102Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention27 mars 2024159 27 sept. 2012 à 23:19
Bonjour,
Je ne vois pas le problème, comment tu déclarerais la fonction en VB6 ?
declare sub fonction2 Lib "nomdelaDLL" Alias "nomdelafonctiondanslaDLL" (ByVal parametre1 As Double,ByVal parametre2 As Double, ByVal parametre3 As Double)
C'est une Sub, tu as une fonction qui retouirne un double :
declare function fonction2 Lib "nomdelaDLL" Alias "nomdelafonctiondanslaDLL" (ByVal parametre1 As Double,ByVal parametre2 As Double, ByVal parametre3 As Double) As Double
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list ---
Mon site