Как привести IntPtr к байту * - PullRequest
7 голосов
/ 03 апреля 2009

Я вызываю метод через interop, который возвращает параметр out IntPtr. Как я могу получить byte* для этого IntPtr, чтобы я мог работать с ним? Я попробовал следующее:

fixed(byte* ptr = (byte)myIntPtr)

но это не сработало. Любая помощь будет оценена!

Ответы [ 5 ]

13 голосов
/ 03 апреля 2009

Вы можете просто написать:

byte* ptr = (byte*)int_ptr;

Вам не нужно использовать ключевое слово fixed . Вы не хотите закрепить IntPtr?

5 голосов
/ 03 апреля 2009

myIntPtr.ToPointer()

1 голос
/ 24 ноября 2009

Мне показалось, что это работает, я не использовал Interop, но все еще вызывал управляемую функцию C ++ из C Sharp. Однако управляемая функция C ++ называется неуправляемым кодом, поэтому она выполняет то же самое, что и Interop.

В любом случае, в функции C ++, которая была вызвана из c-sharp, я использовал этот код:

(anyPointerType*) pointer = (anyPointertype*) myIntPtr.ToPointer();
1 голос
/ 20 августа 2009

Я не хотел, чтобы «небезопасный код» в моем приложении, поэтому я сделал следующее, чтобы преобразовать IntPtr в байт []. Для данного IntPtr с именем unsafeDataBlock:

var byteArray = new byte[dataBlockSize];
System.Runtime.InteropServices.Marshal.Copy(unsafeDataBlock, byteArray, 0, dataBlockSize);
1 голос
/ 03 апреля 2009

Если вам не нужен небезопасный код в вашем приложении, вам придется использовать методы из System.Runtime.InteropServices.Marshal или (что еще лучше) объявить типы параметров ваших функций взаимодействия, чтобы маршалинг происходил автоматически.

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