Passer un tableau de String à une DLL C++ qui devra le remplir

cs_Pyou Messages postés 19 Date d'inscription vendredi 5 juillet 2002 Statut Membre Dernière intervention 27 juillet 2008 - 25 juil. 2008 à 20:38
cs_Pyou Messages postés 19 Date d'inscription vendredi 5 juillet 2002 Statut Membre Dernière intervention 27 juillet 2008 - 27 juil. 2008 à 22:41
Bonjour,

Voici mon problème:

J'aimerais appeler une fonction dans une DLL C++ en lui passant un tableau de string, et que la DLL me remplisse ce tableau avec des string.
Pour résumer, voici ce que je voudrais faire en VB:

Dim tableau() as String
'Le tableau est vide
fctDLL( tableau )
'Le tableau a été rempli et contient n strings

MsgBox tableau(0)
MsgBox tableau(1)
...


Après avoir pas mal cherché, j'en ai conclu qu'il fallait utiliser les SAFEARRAY pour faire ça. Par contre, j'ai aussi lu quelque par qu'il fallait utiliser une DLL COM. Quelle est la différence entre une DLL COM et non COM ? La DLL doit-elle être managé pour que cela marche ?

Pour l'instant, je déclare la fonction de la DLL comme suit :

Declare Function fctDLL Lib "laDLL.dll" (ByRef tableau() As String) As Int32

Le prototype en C++ dans la DLL est le suivant :

int __stdcall fctDLL(SAFEARRAY** tableau)


Pendant mes recherches, je suis tombé sur cet exemple :
http://rp.developpez.com/vb/tutoriels/dll/#L11
Il ne fonctionne pas, car SafeArrayAccessData me renvois DISP_E_ARRAYISLOCKED

Auriez-vous une idée ?

Merci,

Pyou

2 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
26 juil. 2008 à 11:31
salut,
tu es sûr de la déclaration?
jamais vu de dll cpp qui accepte un tableau, çà serait plutôt son pointeur

genre
Declare Function fctDLL Lib "laDLL.dll" (ByRef lptArray As Long) As Int32

 
Dim tableau() as String

redim tableau(0)
'Le tableau est vide

fctDLL(varptr(tableau(0))

'Le tableau a été rempli et contient n strings

MsgBox tableau(0)

MsgBox tableau(1)

mais bon, c'est à l'aveuglette alors....
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
0
cs_Pyou Messages postés 19 Date d'inscription vendredi 5 juillet 2002 Statut Membre Dernière intervention 27 juillet 2008
27 juil. 2008 à 22:41
Merci pour ta réponse.

Si je lui passe le pointeur du tableau, que dois-je récupérer du coté DLL ?
un char **, un string *, un SAFEARRAY** ? Et comment faire pour remplir le tableau ?
0
Rejoignez-nous