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

Résolu
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.

2 réponses

  1. Bonjour

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