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.