Я пытаюсь вызвать метод библиотеки c ++ из проекта c # без особого успеха. Я всегда получаю одну и ту же ошибку.
System.AccessViolationException: 'Attempted to read or write protected
memory. This is often an indication that other memory is corrupt.'
Подпись метода c ++ выглядит следующим образом
int __stdcall getErrorMessage(int errorId, char *&errorMessage);
Я пробовал все комбинации до сих пор, но, похоже, ничего не работает.
[DllImportAttribute("Lib.dll", EntryPoint = "getErrorMessage",
CallingConvention = CallingConvention.StdCall)]
public static extern int getErrorMessage(int errorId, ref StringBuilder errorMessage);
[DllImportAttribute("Lib.dll", EntryPoint = "getErrorMessage",
CallingConvention = CallingConvention.StdCall)]
public static extern int getErrorMessage(int errorId, ref IntPtr errorMessage);
[DllImportAttribute("Lib.dll", EntryPoint = "getErrorMessage",
CallingConvention = CallingConvention.StdCall)]
public static extern int getErrorMessage(int errorId, IntPtr errorMessage);
Любая помощь будет по достоинству оценена.
EDIT
Я называю это следующим образом
var ptr = new IntPtr ();
var ret = NativeMethods.getErrorMessage (number, ref ptr);
Также есть еще один вызов, чтобы освободить память, как только это будет сделано