Я пытаюсь написать код С#, который вызывает метод из неуправляемой библиотеки DLL. Прототипом функции в dll является:
extern "C" __declspec(dllexport) char *foo(void);
В С# я сначала использовал:
[DllImport(_dllLocation)]
public static extern string foo();
Кажется, что он работает на поверхности, но во время выполнения я получаю ошибки в коррупции памяти. Я думаю, что я указываю на память, которая бывает правильной, но уже освобождена.
Я попытался использовать служебную программу кода PInvoke, называемую "P/Invoke Interop Assistant". Это дало мне результат:
[System.Runtime.InteropServices.DLLImportAttribute(_dllLocation, EntryPoint = "foo")]
public static extern System.IntPtr foo();
Это правильно? Если да, как мне преобразовать этот IntPtr в строку в С#?