PInvoke char * w C DLL obsługiwany jako String w C #. Problem z pustymi znakami

Funkcja w C DLL wygląda tak:

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

Muszę to nazwać z aplikacji C #. Robię to w następujący sposób:

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

Ciąg wejściowy jest doskonale przesyłany do biblioteki DLL (mam na to widoczny dowód). Wyjście, które wypełnia funkcja, ale jest błędne. Mam dane hexa, takie jak:

3F-D9-00-01

Ale niestety wszystko, co jest po odcięciu dwóch zer, i tylko pierwsze dwa bajty przychodzą do mojej aplikacji C #. Dzieje się tak, ponieważ (chyba) traktuje jako znak pusty i przyjmuje go jako koniec łańcucha.

Jakiś pomysł, jak mógłbym się go pozbyć? Próbowałem określić go jako IntPtr zamiast łańcucha, ale nie wiem, co z nim zrobić później. Próbowałem to zrobić po:

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

2 powinno być zwykle długością tablicy bajtów. Ale dostaję wszelkiego rodzaju błędy: jak „Żądany zakres rozciąga się poza koniec tablicy”. lub „Próba odczytu lub zapisu pamięci chronionej ...”

Doceniam każdą pomoc.

questionAnswers(1)

yourAnswerToTheQuestion