Intégrer une dll en c++ dans une macro VBA - VB/VBA/VBS - Programmation
Marsh Posté le 07-01-2012 à 22:39:06
Microsoft explique ça sur sa page http://msdn.microsoft.com/en-us/library/bb687915.aspx
Edit : voir aussi http://support.microsoft.com/kb/178474/fr
Marsh Posté le 08-01-2012 à 11:06:14
Merci,
Alors je me trouve toujours avec le même message d'erreur 453 : "Point d'entrée Test d'une DLL introuvable dans test4.dll"
Voici mon code Excel :
Private Declare Function Test Lib "test4.dll" (ByVal y As Double) As Double
Private Sub CommandButton1_Click()
Dim Valeur As Double
Valeur = 2
Cells(1, 1).Value = Test(Valeur)
End Sub
Mon test4.h
//#include "stdafx.h"
#include "windows.h"
#define export __declspec (dllexport)
export double __stdcall test4(double );
mon test4.cpp
// test4.cpp : définit les fonctions exportées pour l'application DLL.
//
#include "test4.h"
double _stdcall test4(double z)
{
return z+2 ;
}
mon test4.def
LIBRARY fonctions
EXPORTS
test4
Où est l'erreur ? Merci : - )
Marsh Posté le 08-01-2012 à 11:28:28
Citation : Où est l'erreur ? Merci : - ) |
Ta fonction dans la dll s'appelle test4
Citation : LIBRARY fonctions |
et ton code VB cherche à trouver une fonction nommée Test dans la dll
Citation : Private Declare Function Test Lib "test4.dll" (ByVal y As Double) As Double |
Comme il n'y en a pas avec ce nom dans la Dll, il y a echec, d'ou le message d'erreur tout a fait logique
"Point d'entrée Test d'une DLL introuvable dans test4.dll"
En faisant
Private Declare Function test4 Lib "test4.dll" (ByVal y As Double) As Double
et
Cells(1, 1).Value = test4(Valeur)
ça devrait coller
A+,
Marsh Posté le 08-01-2012 à 11:29:19
gilou a écrit :
|
Je vais attendre la suite ^^
Marsh Posté le 08-01-2012 à 11:33:36
Elle est la
Noter que le message d'erreur (traduit sans trop comprendre par le traducteur) n'est pas clair.
"Point d'entrée Test introuvable dans test4.dll"
aurait été plus clair.
A+,
Marsh Posté le 08-01-2012 à 11:36:47
gilou a écrit : Elle est la |
Merci beaucoup, ça marche enfin !!!
Marsh Posté le 08-01-2012 à 11:38:07
Si tu veux un exemple plus construit, mais en anglais, voir par exemple ce lien: http://www.developerfusion.com/art [...] ual-basic/
A+,
Marsh Posté le 08-01-2012 à 11:40:10
Bah maintenant la prochaine étape va être de passer un tableau de double et de renvoyer une tableau également!
ensuite j’écrirai mes équations : - )
Marsh Posté le 08-01-2012 à 15:13:55
Alors comme je le pensais je n'y arrive pas sans vous : - )
Symptome : Excel crash sans message d'erreur, module test2 incriminé (test4 seul fonctionne très bien)
L'idée du code suivant est de :
- passer un tableau de VBA vers ma dll
- de récupérer un nombre (qui ne veut rien dire c'est juste pour faire tourner la macro et être certain qu'elle fonctionne)
test4.cpp :
Code :
|
test4.h
Code :
|
test4.def
Code :
|
VBA
Code :
|
merci de votre aide.
L'idée est d'ensuite de passer un tableau au lieu d'un nombre dans le sens dll => VBA également
Marsh Posté le 15-01-2012 à 15:28:22
Bon j'ai réussi a passer un tableau dans les deux sens en declarant non pas une fonction mes un(e) sub.
Maintenant ma question (toute simple) :
- Comment déclarer la dll sans mettre le chemin en entier et sans placer la dll dans windows\system ?
Code :
|
Un truc du style ci-après qui ferait ce que fait ci-avant ?
Code :
|
Mais ça ne marche pas !
Merci d'avance
Marsh Posté le 07-01-2012 à 11:19:23
Bonjour
J'ai cherché sur des forums, google, etc... comment créer une dll en C++ et ensuite l'utiliser dans une macro excel mais il y a toujours une erreur généré dans les exemples donnés !
Donc je me décide à poser la question sur ce forum
J'utilise :
- Visual C++ 2010 express (version gratuite)
- Excel 2007
Mon besoin :
- La dll à deux entrées (des doubles par exemple) et une sortie (un double aussi par exemple qui sera l'addition des deux entrées)
- La macro appelle la dll et affiche le résultat dans une cellule (c'est l'appelle de la dll qui me pause problème ici).
Vous aurez compris que c'est un programme simple et inutile. Mais il aura pour objectif que je comprenne le/les liens qu'il doit y avoir entre la dll et vba.
Je débute aussi bien en vba que en c++ (en ce qui concerne les E/S) !
l'objectif premier et de pouvoir accélérer mon code VBA déjà créée. Ce sont des calculs statistiques qui prennent énormément de ressource !
L'objectif second et d'apprendre un peut plus le C++.
Merci d'avance pour les exemples que vous pourrez m'apporter.