Bonjour à tous,

J'aimerais utiliser une dll écrite en c dans du vba.
J'ai parcouru ce tuto:
http://rp.developpez.com/vb/tutoriels/dll/

mais je n'arrive pas à appliquer cette histoire de SAFEARRAY et je ne suis même pas sur qu'il faille l'utiliser...

le truc c'est que j'ai une fonction en c qui doit recevoir une structure contenant un tableau dynamique de chaine de caractères.

en c j'ai donc:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
typedef struct Stops Stops;
struct Stops{
    char stopId[7];
    size_t numberOfPicturesPath;
    char** picturesPath;
};
 
int __stdcall TestStruct(Stops* stopList);
où la fonction TestStruct ajoute des chaines dans picturesPath et chaque ajout incrémente numberOfPicturesPath...

et en vba j'ai donc écrit ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Declare Function TestStruct Lib "Machin.dll" (ByRef stopList As Stops) As Long
 
Type Stops
    stopId As String * 7
    numberOfPictures As Long
    pictures() As String
End Type
 
(...)
Private Sub TestMachin()
  Dim stopList As Stops
  Dim result As Long
  result = TestStruct(stopList)
(...)
Tel quel, le code s'exécute jusqu'au return de la fonction TestStruct dans laquelle stopList se remplit bien comme je veux mais une foi le return fait, access se gaufre complètement (fermeture + demande d'envois d'un rapport d'erreur...)

que dois-je faire?

j'imagine un truc du genre réécrire la structure du genre?:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
typedef struct Stops Stops;
struct Stops{
    char stopId[7];
    size_t numberOfPicturesPath; //ceci deviendrait inutile?
    SAFEARRAY *picturesPath;
};
mais alors il faut réécrire toutes les fonctions utilisant la structure?