PInvoke char * em C DLL manipulado como String em C #. Problema com caracteres nulos

A função em C DLL é assim:

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

Eu devo chamar isso de C # app. Eu faço isso da seguinte maneira:

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

A string de entrada é perfeitamente transmitida para a DLL (tenho uma prova visível disso). A saída que a função preenche, embora esteja errada. Eu tenho dados hexa nele, como:

3F-D9-00-01

Mas infelizmente tudo o que é depois dos dois zeros é cortado, e apenas os dois primeiros bytes chegam ao meu aplicativo C #. Isso acontece, porque (eu acho) ele trata como caractere nulo e o considera como o final da string.

Alguma idéia de como eu poderia me livrar disso? Eu tentei especificá-lo como IntPtr ao invés de uma string, mas eu não sei o que fazer com ele depois. Eu tentei fazer depois:

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

2 deve ser normalmente o comprimento da matriz de bytes. Mas recebo todos os tipos de erros: como "o intervalo solicitado ultrapassa o final do array". ou "Tentativa de ler ou gravar memória protegida ..."

Eu aprecio qualquer ajuda.

questionAnswers(1)

yourAnswerToTheQuestion