2 Stimmen

Äquivalent zu Marshal.PtrToString*-Methoden für Byte-Array

Wenn ich einen nicht verwalteten Zeiger habe und eine bestimmte Anzahl von Bytes von diesem Ort in ein Byte-Array übertragen möchte, was ist der beste Weg, dies zu tun?

d.h. was ist das Äquivalent zu Marshal.PtrToString*-Methoden, aber wo das Ziel ist ein Byte()

Gracias

2voto

Richard Punkte 103159

Marshal.Copy hat Überladungen für das Kopieren von Byte-Arrays in/aus einem Zeiger.

Unter Byte() Ist dies eine Interaktion mit COM im Stil von VB6? Warum sollten Sie den zugrundeliegenden COM-Typ mit dem OLE-COM Viewer (in den Windows SDK-Tools enthalten, die mit VS installiert werden) überprüfen, um die von VB erstellte dll zu öffnen und zu sehen, was ihre typelib sagt.

0voto

JaredPar Punkte 699699

Versuchen Sie den folgenden Code

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);
  }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X