totem | 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.cpp : définit les fonctions exportées pour l'application DLL.
- //
- #include "test4.h"
- double _stdcall test4(double z,double y)
- {
- int i;
- for(i=1;i<10000000;i++)
- {
- z=z/z+z-1;
- z=sqrt(pow(z,2));
- z=z+1;
- }
- return z+y;
- }
- double _stdcall test2(int * tableau,long lngNbItems)
- {
- long i;
- for(i=0;i<lngNbItems;i++)
- {
- tableau[i] = 2 * tableau[i];
- }
- return i;
- }
|
test4.h
Code :
- #include "math.h"
- #define export __declspec (dllexport)
- export double __stdcall test4(double );
- export double __stdcall test2(int ,long );
|
test4.def
Code :
- LIBRARY fonctions
- EXPORTS
- test4
- test2
|
VBA
Code :
- 'Déclaration de la DLL
- Private Declare Function test4 Lib "C:\Users\Jerome\Desktop\test\Test4\test4\Debug\test4.dll" (ByVal y As Double, ByVal x As Double) As Double
- Private Declare Function test2 Lib "C:\Users\Jerome\Desktop\test\Test4\test4\Debug\test4.dll" (tableau As Long, ByVal lngNbItems As Long)
- Private Sub CommandButton1_Click()
-
- 'Déclaration des variables
- Dim ValeurX As Double
- Dim ValeurY As Double
- Dim i As Long
- Dim elements(0 To 9) As Long
-
- 'Dim Tableau As Variant
-
-
- 'Remplissage des variables
- ValeurX = Cells(1, 1).Value
- ValeurY = Cells(1, 2).Value
-
-
-
- 'Boucle dans vba
- For i = 1 To 10000000 Step 1
- ValeurX = ValeurX / ValeurX + ValeurX - 1
- ValeurX = (ValeurX ^ 2) ^ 0.5
- ValeurX = ValeurX + 1
- Next i
- Cells(3, 1).Value = ValeurX
-
- 'Appelle de la dll
- ValeurX = Cells(1, 1).Value
- Cells(2, 1).Value = test4(ValeurX, ValeurY)
- For i = 0 To 9
- elements(i) = i
- Next
- Cells(2, 2).Value = test2(elements(0), 10)
-
- 'Affichage du temps
- Cells(4, 1).Value = Fin - Debut
-
- End Sub
|
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 Message édité par totem le 08-01-2012 à 15:41:53
|