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

Résolu
HOLU -  
Darkantas Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -
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

le père
 
Bonjour

pas sûr mais je crois que c'est
Declare Sub ecriture Lib "Projet_test.dll" (ByVal t As Integer)
1
HOLU
 
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   Statut Membre Dernière intervention  
 
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
HOLU
 
Bonsoir,
ça ne change rien.
Merci à vous
0