Bonjour à tous,
J'ai rencontré un problème avec l'appel d'une fonction "C" dans "C#".
La fonction "C" reçu en argument un pointeur de fonction "CALLBACK" implantée en "C#", et elle appelle cette dernière à son tour en lui passant un paramètre de type "chaîne de caractères" (type "string" côté "C#").
Code "C" :
Code "C#":
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 typedef void (__stdcall *PRETURNUNICODESTRINGCALLBACK)(const wchar_t *lpszText); __declspec(dllexport) void ReturnUnicodeStringProc(PRETURNUNICODESTRINGCALLBACK pReturnStringCallback) { pReturnStringCallback(L"Data"); }
Si la fonction "C" passe une chaîne de type "MBCS" à la fonction "CALLBACK" en "C#", tout fonctionne bien. Mais si c'est une chaîne "Unicode" qui est retournée, seul le premier caractère est correctement transcrit dans l'objet "string" de "C#".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 private delegate void DoSomethingCallbackProc(string lpszText); [DllImport("SampleDLL.dll", CharSet = CharSet.Unicode)] private static extern void ReturnUnicodeStringProc(DoSomethingCallbackProc proc); static void Main(string[] args) { ReturnUnicodeStringProc(new DoSomethingCallbackProc(DoSomethingCallback)); } private static void DoSomethingCallback(string lpszText) { int i = 0; }
Je joins avec ce message un code exemple qui démontre ce problème.
Je vous remercie par avance de votre aide






Répondre avec citation



Je viens de relire, je suis un boulet! Il passe *TOUJOURS* un ptr sur une chaîne Unicode.

Partager