J'ai testé, j'ai avancé mais j'ai un problème.
Je l'ai posté sur le forum vba, mais vu que ca concerne aussi le c, je demande aussi à la communauté C.
donc ma dll devait à la base retourner un tableau de structures contenant un tableau de char*...
J'ai déclaré cette structure comme ceci en VBA:
1 2 3 4 5
| Type Stops
stopId As String
numberOfPictures As Long
pictures() As String
End Type |
la fonction c est déclarée en VBA comme ceci:
Private Declare Function GetSafePictureFiles Lib "MaDLL.dll" (ByRef stopList() As Stops, ByRef size As Long) As Long
Dans la dll le prototype de la fonction est comme ceci:
int __stdcall GetSafePictureFiles(SAFEARRAY** safeStopList, size_t* numberOfStop);
Et la structure est comme ceci:
1 2 3 4 5 6
| typedef struct SafeStops SafeStops;
struct SafeStops{
BSTR stopId;
size_t numberOfPictures;
SAFEARRAY* pictures;
}; |
en VBA j'appelle la fonction comme ceci:
1 2 3 4 5 6 7 8
| Private Sub Test()
Dim stopList() As Stops
Dim numberOfStops As Long
On Error GoTo Catch
ReDim stopList(1)
result = GetSafePictureFiles(stopList, numberOfStops)
... |
Une foi la fonction appelée, le tableau stopList est remplis bizarrement... ce qui fait planter access.
Le premier élément et tous les éléments d'indice multiples de 3 sont corrects mais pas les autres...
De plus, tous les x derniers éléments du tableau sont vide
donc pour mes 5489 cellules:
stopList(0).stopId : Ok
stopList(1).stopId : Contenu rien avoir
stopList(2).stopId : fait planter access
stopList(3).stopId : Ok
stopList(4).stopId : Contenu rien avoir
stopList(5).stopId : fait planter access
...
stopList(4107).stopId : Ok
stopList(4108).stopId : Contenu rien avoir
stopList(4109).stopId : fait planter access
...
stopList(4116).stopId : Ok
stopList(4117).stopId : vide
stopList(4118).stopId : vide
stopList(4119).stopId : vide
stopList(4120).stopId : vide
...
stopList(5488).stopId : vide
Or, quand j'affiche le contenu de mon safearray en c, tous les éléments sont justes...
A mon avis, j'ai mal déclarer quelque chose quelque part... j'avoue que je ne vois pas dutout ce qui se passe.
Quelqu'un aurait il une idée?
Partager