Как вы можете маршалировать массив байтов в C#?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как вы можете маршалировать массив байтов в C#?

Сообщение Anonymous »

Я пытаюсь вызвать следующую функцию 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. ... у кого-нибудь есть идеи?

Подробнее здесь: https://stackoverflow.com/questions/342 ... array-in-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»