Как импортировать const int * const buffer [] в C #? - PullRequest
0 голосов
/ 09 февраля 2009

Это сложно для меня.

const int * const buffer[]

В настоящее время я перевёл это так:

byte[] buffer

Проблема в том, что я получаю исключения AccessViolation, когда DLL вызывает функцию с использованием вышеуказанного параметра.

Спасибо за помощь.

Ответы [ 4 ]

3 голосов
/ 09 февраля 2009

С двумя const, безусловно, это должно быть признаком, достаточным для того, чтобы вы не могли его изменить :-). Но, если серьезно, одно из них утверждает, что указатель не должен изменяться, а другое - что данные, на которые указывает указатель, не должны изменяться.

Вот почему вы получаете нарушение прав доступа.

Вам нужно будет скопировать , а не просто преобразовать данные в другой буфер, который несколько менее постоянен. Подсказка: Buffer.BlockCopy - это то, что нужно.

1 голос
/ 09 февраля 2009

Модификаторы const не влияют на сигнатуру PInvoke, хотя они могут влиять на то, как вы обращаетесь с данными. Поскольку параметр буфера является массивом указателей на целые числа, правильный перевод будет:

IntPtr[] buffer;
1 голос
/ 09 февраля 2009

Разве не sizeof(int) > sizeof(byte)? Если так, то у вас наверняка будут проблемы.

0 голосов
/ 09 февраля 2009

Редактировать: теперь это работает, никаких исключений AccessViolation, но я не знаю, как правильно извлекать данные из такого массива.

Файл примера использует этот тип доступа:

buffer[0][i]
buffer[1][i]

но у меня есть только 1 указатель в буфере []. Этот указатель является указателем на двумерный массив? Как это сделать в .NET? Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...