Я пытаюсь вызвать следующую функцию C ++, которая заключена в DLL:
unsigned char * rectifyImage(unsigned char *pimg, int rows, int cols)
Мой оператор импорта выглядит следующим образом:
[DllImport("mex_rectify_image.dll")]
unsafe public static extern IntPtr rectifyImage(
byte[] data, int rows, int columns);
А моя процедура вызова выглядит следующим образом:
byte[] imageData = new byte[img.Height * img.Width * 3];
// ... populate imageData
IntPtr rectifiedImagePtr = rectifyImage(imageData, img.Height, img.Width);
Byte[] rectifiedImage = new Byte[img.Width * img.Height * 3];
Marshal.Copy(rectifiedImagePtr, rectifiedImage, 0, 3 * img.Width * img.Height);
Тем не менее, я получаю сообщение об ошибке во время выполнения:
Первое случайное исключение типа System.AccessViolationException
произошло в xxx.dll
Попытка чтения или записи защищенной памяти. Это часто указывает на то, что другая память повреждена.
Мне просто интересно, заключается ли ошибка в том, как я марширую свои данные или в импортированный файл DLL ... у кого-нибудь есть идеи?