Эквивалентен методам Marshal.PtrToString * для байтового массива - PullRequest
2 голосов
/ 25 февраля 2009

Если у меня есть неуправляемый указатель и я хочу передать указанное количество байтов из этого местоположения в байтовый массив, каков наилучший способ сделать это?

т.е. что эквивалентно методам Marshal.PtrToString *, но где назначение - Byte ()

Спасибо

Ответы [ 2 ]

2 голосов
/ 25 февраля 2009

Marshal.Copy имеет перегрузки для копирования байтовых массивов в / из указателя.

К Byte() это взаимодействие с COM в стиле VB6? Почему вы хотите проверить базовый тип COM, используя OLE-COM Viewer (включенный в инструменты Windows SDK, установленные с VS), чтобы открыть созданную VB библиотеку DLL и посмотреть, что говорит ее typelib.

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

Попробуйте следующий код

public static byte[] PtrToByteArray(IntPtr ptr, int len) {
  var array = new byte[len];
  for ( int i = 0; i < len; i++ ) { 
    array[i] = (byte)Marshal.PtrToStructure(ptr, typeof(byte));
    ptr = new IntPtr(ptr.ToInt64()+IntPtr.Size);
  }
}
...