Como marshall void * com invocação de plataforma

Eu preciso chamar uma função de um C api contido em uma dll. O protótipo de função tem a seguinte aparência ....

int func( char* name, void* value );

onde o conteúdo do valor do ponteiro pode se referir a qualquer tipo dependente do nome passado. Não sei como configurar a porta Dll para corrigir corretamente esse vazio *. Eu tenho experimentado o IntPtr, que parece funcionar quando o valor é um int, mas não consigo recuperar os valores corretamente para carros alegóricos etc.

Estou tentando importar a função assim ...

[DllImport("dllname.dll", CharSet = CharSet.Ansi)]
public static extern int func( string name, ref IntPtr value );

pls note que o valor é uma saída. Um ponteiro para um valor de qualquer tipo, isto é, o endereço em uma região global da memória de um valor de um tipo conhecido (conhecido pelo chamador). Em um programa, espera-se que o chamador lance esse vazio * para o tipo e a desreferência desejados para obter o valor real armazenado lá. As respostas dadas até agora parecem se basear em uma suposição de que a função gravará o resultado no local do ponteiro transmitido. Minha culpa é que não fui muito específico. Desculpa. C # não é a minha bolsa, e eu nem sei se o IntPtr é o caminho a percorrer aqui ...

questionAnswers(4)

yourAnswerToTheQuestion