Je sais que le sujet a déjà pas mal été débattu,
J'ai quand même pas mal cherché (MSDN, google,...) pour trouver comment résoudre mon problème,
MAIS je n'ai pas encore trouvé d'exemple où on passerait à la DLL une chaine de longueur variable et inconnue dans sa longueur max, comme on lui passerait un bête "ref String la_chaine", mais cette fois en [OUT] ou [IN/OUT] et pas en [IN] comme on peut le faire.
Je n'ai trouvé jusqu'ici que des exemples de passage d'une chaine de longieur fixe, ou de passage d'un pointeur sur un buffer (avec StringBuilder en fait), et ce, en passant aussi la taille du buffer...Ce qui suppose donc de savoir à l'avance la taille maximale de la chaine en retour.
Or, dans mon cas, la DLL peut me renvoyer 3 caractères comme x milliers, x étant totalement inconnu...
Pour fixer les idées, voici la déclaration de la fonction C++ et comment elle procède en interne pour remplir la chaine retour :
ESS_GetCubeItems(char** ListItems)
{
...
sprintf(*ListItems,"%s%s%s",*ListItems,tsResultat[iCount][0],csSepListeAlias);
...
}
Comment puis-je appeler en C# cette DLL sans savoir à l'avance la taille de la chaine renvoyée ?
Est-ce seulement possible ?
Cordialement,
Laurent
PS : bizarrement, avec un appel "ESS_GetCubeItems(ref ma_chaine)" où ma_chaine a été définie comme "string ma_chaine = string.Empty;"...
ça marche
MAIS à la longue (10 appels...), un appel à la DLL ne répond plus qu'avec
"System.NullReferenceException : La référence d'objet n'est pas définie à une instance d'un objet."