Byte array als pointer übergeben
-
Hallo,
die folgende Funktion Kithara.KS_enumDevices erwartet ein pointer auf ein byte
array pDeciceNameBuffer.byte[] DeviceNameBuffer = new byte[200];
byte* pDeciceNameBuffer = ?;Kithara.KS_enumDevices("USB", 0, pDeciceNameBuffer, 0);
Wie bekomme ich einen pointer auf DeviceNameBuffer?
-
Ist KS_enumDevices() ein DllImport? Und könnte man da ggf. einfach die Signatur anpassen?
-
unsafe void foo() { byte[] DeviceNameBuffer = new byte[200]; fixed (byte* pDeciceNameBuffer = DeviceNameBuffer) { } }
Und mit /unsafe kompilieren.
-
Ich habe den Source Code KdrcDemo.cs zum Projekt hinzugefügt.
In KdrcDemo.cs gibt es dann einen DllImport
//------ Device handling ------
[DllImport("KdrcDemo.dll", CallingConvention = CallingConvention.StdCall)]
public static extern unsafe int KS_enumDevices(
string deviceType, int index, byte* pDeviceNameBuf, int flags);
-
µ schrieb:
unsafe void foo() { byte[] DeviceNameBuffer = new byte[200]; fixed (byte* pDeciceNameBuffer = DeviceNameBuffer) { } }
private unsafe void Test() { byte[] DeviceNameBuffer = new byte[200]; fixed (byte* pDeciceNameBuffer = DeviceNameBuffer) { iTest = Kithara.KS_enumDevices("USB", 0, pDeciceNameBuffer, 0); } }
Funktioniert.
Und mit /unsafe kompilieren.
Unter Projekt->Eigenschaften->Erstellen Unsicheren Code zulassen.
Vielen Dank.