Renvoi de chaînes à partir de fonctions Windows C

Je suis un novice complet des fonctions de niveau API Windows pur en C et C ++ et je teste depuis peu l’interopérabilité .NET. J’ai construit une bibliothèque simple qui a renvoyé avec succès des valeurs numériques (int / float, etc.) à un appelant .NET, mais je n’ai pas autant de chance avec les chaînes.

J’ai essayé divers types de données, mais aucun ne semble fonctionner: LPSTR, LPCSTR, LPCTSTR et LPCWSTR. Certes, je n’ai pas essayé char *. En outre, une fois qu’une méthode est configurée pour renvoyer une chaîne, est-ce que cela nécessite un marshalling par .NET en tant que type de données spécifique, ou peut-il simplement être lu directement dans un object System.Ssortingng? J’ai essayé d’parsingr dans un IntPtr puis dans une chaîne, mais cela n’a pas fonctionné.

Faites comme l’API Windows. Généralement, il ne renvoie pas de pointeurs, il remplit les tampons que vous transmettez.

Code géré:

 [DllImport("YourLibrary", CharSet = CharSet.Auto)] static extern Int32 SomeArbitraryFunction ( Ssortingng input, // ssortingng passed to API (LPCSTR) SsortingngBuilder output, // output filled by API (LPSTR) Int32 outputMaxLen // SsortingngBuilder.Capacity ); 

Du côté C / C ++:

 DWORD WINAPI SomeArbitraryFunction ( LPCSTR input, LPSTR output, DWORD outputMaxLen );