[VBA/ DLL C] Passage d'un paramètre

Résolu/Fermé
HOLU - 24 déc. 2009 à 20:52
Darkantas Messages postés 6 Date d'inscription lundi 28 mai 2012 Statut Membre Dernière intervention 4 juin 2012 - 29 mai 2012 à 15:04
Bonjour,

J'ai construit une méthode C dans une dl, et je l'appelle depuis Microsoft Visual Basic (dans Excel) en lui passant un paramètre, mais celui ci n'est pas transmis jusqu'à la fonction C.

Voici mon code :

Fichier dllmain.c :
#include "dll.h"
#include <stdlib.h>
#include <stdio.h>

void __stdcall ecriture(int t)
{
  FILE * fich = fopen("fichier_test.txt", "w");
  fprintf(fich,"%d\n",t);
  fclose(fich);
 
}


Fichier dll.h :
#include <stdio.h>
#include <string.h>
#include <windows.h>

#define export __declspec(dllexport) /* définit la macro EXPORT  */

export void __stdcall ecriture(int t);


Code vba depuis Excel :
Declare Sub ecriture Lib "Projet_test.dll" (t As Integer)

Sub test()

Call ecriture(5)

End Sub


Résultat : Le fichier est bien créé, mais la valeur dedans est "1308054" !
Comment ça se fait?

Merci pour votre aide.
A voir également:

2 réponses

Bonjour

pas sûr mais je crois que c'est
Declare Sub ecriture Lib "Projet_test.dll" (ByVal t As Integer)
1
En fait vous avez raison, c'etait en partie le ByVal qu'il fallait ajouter, Il faut aussi mettre Long au lieu d'Integer!

Donc il faut mettre :

Declare Sub ecriture Lib "Projet_test.dll" (ByVal t As Long)

Merci beaucoup vous deux !
0
Darkantas Messages postés 6 Date d'inscription lundi 28 mai 2012 Statut Membre Dernière intervention 4 juin 2012
29 mai 2012 à 15:04
C'est pas grâce au ByVal, en VBA et en C tous les types de variables ne font pas la même taille, il est donc nécessaire de s'aligner sur un seul et unique modèle.
Il existe également une option dans Visual qui permet d'aligner les structures sous le format 4 octets. Je vous conseille de le mettre pour éviter tout futurs problèmes.
0
Bonsoir,
ça ne change rien.
Merci à vous
0

Discussions similaires