Laden...

[gelöst] C++Dll Import: Funktion mit char* Parameter: nicht Interop-Kompatibel

Erstellt von sth_Weird vor 14 Jahren Letzter Beitrag vor 14 Jahren 3.175 Views
S
sth_Weird Themenstarter:in
469 Beiträge seit 2007
vor 14 Jahren
[gelöst] C++Dll Import: Funktion mit char* Parameter: nicht Interop-Kompatibel

hallo,

ich versuche gerade eine C++ Dll in C# zu verwenden. Das meiste klappt auch, nur habe ich eine Funktion, die als Parameter einen unsigned char* erwartet.
Bei meinen bisherigen Versuchen diese Funktion zu verwenden bekomme ich Fehler, dass "Die Typensignatur der Methode ist nicht Interop-kompatibel."
Versucht habe ich es mit ref byte[] und ref char[] als Parameter (in einem C++ Beispielprogramm wurde der Funktion ein unsigned char-Array übergeben).
Ich habe im Netz nichts hilfreiches gefunden, vielleicht kann mir hier jemand sagen wie es richtig geht?

In C++ Dll (Header):

BOOLEAN STDCALL readData(UCHAR* buffer);

meine erfolglose Umsetzung:

[DllImport("AtUsbHid.dll")]
public static extern bool readData(ref char[] buf);

bzw.

public static extern bool readData(ref byte[] buf);

EDIT: Formatierung

gruß & thx
sth_Weird

++++++++++++++++++++~+
Fluchen ist die einzige Sprache, die jeder Programmierer perfekt beherrscht


Linux is for free...if your time is worth nothing
++++++++++++++++++++~+

479 Beiträge seit 2008
vor 14 Jahren

Hallo,

gibt es in C# nicht ein uchar?

mfg.
markus111

EDIT: doch nicht

[Follow me on Twitter](http://twitter.com/blendingsky)
T
327 Beiträge seit 2006
vor 14 Jahren

Nur so ne Idee: Wenn deine Daten ein String ist, versuchs mal mit nem StringBuilder


public static extern bool readData(ref StringBuilder buf);

Hatte mal was ähnliches, da hat's so funktioniert... War allerdings eine in Delphi programmierte DLL auf die ich da zugegriffen hatte...

S
sth_Weird Themenstarter:in
469 Beiträge seit 2007
vor 14 Jahren

gelöst...
so hats nun funktioniert:


[DllImport("AtUsbHid.dll")]
    public static extern bool writeData([In, MarshalAs(UnmanagedType.LPArray)] byte[] buf);

    [DllImport("AtUsbHid.dll")]
    public static extern bool readData([Out, MarshalAs(UnmanagedType.LPArray)] byte[] buf);

gruß
sth_Weird

++++++++++++++++++++~+
Fluchen ist die einzige Sprache, die jeder Programmierer perfekt beherrscht


Linux is for free...if your time is worth nothing
++++++++++++++++++++~+