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