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
Partager