COM C++/VB6 tableau de string en argument

COM C++/VB6 tableau de string en argument - VB/VBA/VBS - Programmation

Marsh Posté le 23-07-2009 à 11:32:19    

Bonjour,
 
J'ai un programme en C++ qui fait appel à une fonction COM en VB6. Cette fonction prend en paramètre un tableau de string et retourne un autre tableau de string.
Voilà le prototype de la fonction en VB6 :

Citation :

Public Function MaFonctionVB(Tableau() As String) As String()


Elle est appelée depuis C++ de cette façon :

Citation :

SAFEARRAY *PtrTableauRetour = ObjetVB->MaFonctionVB(PtrTableauArg);
 
sachant que PtrTableauArg est du type SAFEARRAY **


Le problème est que je suis incapable de lire le contenu du tableau en VB6. Je pense qu'il s'agit d'un problème de conversion de données.
En clair, dans ma fonction VB, si je fait Tableau(0), j'ai "??????" au lieu d'avoir ma chaîne de caractères.
 
Je peux affirmer que les données sont correctement enregistrées dans le tableau en C++, car si dans la fonction VB je retourne le tableau sans le modifier (MaFonctionVB = Tableau), C++ est capable de le déchiffrer.
 
Quelqu'un connaît-il une façon de convertir ces chaînes de caractères pour qu'elles soit interprétées par VB6 ?

Reply

Marsh Posté le 23-07-2009 à 11:32:19   

Reply

Marsh Posté le 23-07-2009 à 12:25:50    

Reply

Marsh Posté le 23-07-2009 à 14:12:47    


Merci pour le lien, mais cette technique permet de faire appel à une fonction C++ depuis un projet VB. Or, c'est le contraire qu'il me faut.
 
En fait, dans mon projet, j'ai eu aussi besoin de faire appel à une fonction C++ via une API dans VB6. Cette fonction ayant aussi pour arguments un tableau de string. Ca marche très bien.
Voici un exemple :

Citation :

Déclaration de l'API dans le programme VB6 :
Private Declare Sub MaFonctionCPP Lib "MaDLL_CPP.dll" Alias "_MaFonctionCPP@4" (MonTableauVB() As String)
 
Prototype de la fonction C++ :
extern "C" __declspec(dllexport) void __stdcall MaFonctionCPP(SAFEARRAY **PtrTableau);


 
Concrètement, c'est dans cette fonction "MaFonctionCPP" qu'il faut que j'appelle une fonction VB6 en y faisant passer le tableau "PtrTableau" et c'est là que je bloque.
Oui je sais, c'est tordu de faire appel à une fonction VB6 depuis une fonction en C++, elle-même appelée depuis un programme en VB6. Mais ce sont les différentes évolutions du programme qui m'oblige à m'enfoncer dans cette voie :pt1cable:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed