1 pièce(s) jointe(s)
Appel fonction "C" en "C#" ("CALLBACK" + "Unicode")
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:
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");
} |
Code "C#":
Code:
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;
} |
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#".
Je joins avec ce message un code exemple qui démontre ce problème.
Je vous remercie par avance de votre aide