Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/02/2011, 14h12   #1
Membre régulier
 
Homme Michaël
Développeur .NET
Inscription : avril 2008
Messages : 80
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 30
Localisation : Belgique

Informations professionnelles :
Activité : Développeur .NET
Secteur : Transports

Informations forums :
Inscription : avril 2008
Messages : 80
Points : 84
Points : 84
Par défaut Problème lors de la récupération d'un tableau d'udt d'une dll c

Bonjour à tous,

j'ai essayé de faire une dll en C utilisable en VBA.

cette dll devait à la base retourner un tableau de structures contenant un tableau de char*...

J'ai déclaré cette structure comme ceci en VBA:

Code :
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:

Code :
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:

Code :
int __stdcall GetSafePictureFiles(SAFEARRAY** safeStopList, size_t* numberOfStop);
Et la structure est comme ceci:

Code :
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:

Code :
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...

donc:
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

De plus, tous les x derniers éléments du tableau sont 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?
mkl238 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h13.


 
 
 
 
Partenaires

Hébergement Web