Bonjour à vous,
Je développe sous C# 1.1.
Voici mon problème :
J'ai une DLL non managée programmée en C dont je n'ai pas le code source. J'ai reçu avec cette DLL une liste de toutes les fonctions disponibles dans cette DLL.
Grâce à cette liste, je peux effectuer un DLLimport d'une des fonctions disponibles.
J'ai debuggué et après avoir exécuté la fonction, en retour de sCommand, j'ai : "Exemple".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 [DllImport("NomDll.dll")] private static extern UInt16 Fonction( ref IntPtr Var1, ref IntPtr Var2, [MarshalAs(UnmanagedType.LPStr)] ref string sCommand, [MarshalAs(UnmanagedType.LPTStr)] out string Var4, out UInt16 Var5); string sCommand = "Exemple" + Chr(0) + "Bonjour"; nReturn = Fonction(ref var1,ref var2, ref sCommand, out var4,out var5);
J'ai effectué des recherches sur le fait que le [MarshalAs(UnmanagedType.LPStr)] a, comme caractère par défaut, le null pour terminer une chaîne et le chr(0) est un caractère null.
Comment faire passer ce caractère null ? (En changeant le marshal ? mais par lequel ?)
J'ai effectué des tests en mettant la fonction dans une DLL visual basic 6 en l'appelant du .NET et cela fonctionne parfaitement car j'ai comme valeur de retour pour sCommand la valeur de départ ("Exemple\0Bonjour").
Avez-vous une solution ?
D'avance, merci.
Partager