Je suis en train d'écrire du code C# qui appelle une méthode à partir d'une DLL non managée. Le prototype de la fonction dans la dll:
extern "C" __declspec(dllexport) char *foo(void);
En C#, j'ai d'abord utilisé:
[DllImport(_dllLocation)]
public static extern string foo();
Il semble fonctionner sur la surface, mais je suis de corruption de la mémoire des erreurs lors de l'exécution. Je pense que je suis pointant à la mémoire de ce qui arrive à être correct, mais a déjà été libérée.
J'ai essayé d'utiliser un PInvoke code gen utilitaire appelé "P/Invoke Interop Assistant". Il m'a donné la sortie:
[System.Runtime.InteropServices.DLLImportAttribute(_dllLocation, EntryPoint = "foo")]
public static extern System.IntPtr foo();
Est-ce correct? Si oui, comment puis-je convertir ce IntPtr à une chaîne de caractères en C#?