PInvoke char * in der C-DLL wird in C # als String behandelt. Problem mit Nullzeichen

Die Funktion in C DLL sieht folgendermaßen aus:

int my_Funct(char* input, char* output);

Ich muss dies von C # -App aufrufen. Ich mache das wie folgt:

...DllImport stuff...
public static extern int my_Funct(string input, string output);

Die Eingabezeichenfolge wird perfekt an die DLL übertragen (ich habe sichtbare Beweise dafür). Die Ausgabe, die die Funktion ausfüllt, ist zwar falsch. Ich habe Hexadaten darin, wie:

3F-D9-00-01

Aber leider wird alles, was nach den beiden Nullen steht, abgeschnitten und nur die ersten beiden Bytes kommen in meine C # -App. Es kommt vor, weil es (glaube ich) als Nullzeichen behandelt und es als Ende der Zeichenkette nimmt.

Irgendeine Idee, wie ich es loswerden könnte? Ich habe versucht, es als aus IntPtr anstelle eines Strings anzugeben, aber ich weiß nicht, was ich danach damit machen soll. Ich habe versucht zu tun, nachdem:

 byte[] b1 = new byte[2];
 Marshal.Copy(output,b1,0,2);

2 sollte normalerweise die Länge des Byte-Arrays sein. Es werden jedoch alle möglichen Fehler angezeigt: "Der angeforderte Bereich erstreckt sich über das Ende des Arrays hinaus." oder "Versuch, geschützten Speicher zu lesen oder zu schreiben ..."

Ich freue mich über jede Hilfe.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage