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.