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.


Anmelden zum Antworten