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.

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 debuggué et après avoir exécuté la fonction, en retour de sCommand, j'ai : "Exemple".

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.