Cómo marshall void * con invocar plataforma

Necesito llamar a una función desde una API C contenida en un dll. El prototipo de la función tiene el siguiente aspecto ...

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

donde el contenido del valor del puntero puede referirse a cualquier tipo que dependa del nombre pasado. No estoy seguro de cómo configurar el puerto Dll para ordenar correctamente este vacío *. He estado experimentando con IntPtr que parece funcionar cuando el valor es un int pero no puedo recuperar los valores correctamente para flotantes, etc.

Estoy tratando de importar la función de esta manera ...

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

tenga en cuenta que el valor es una salida. Un puntero a un valor de cualquier tipo, es decir, la dirección en una región global de memoria de un valor de un tipo conocido (conocido por la persona que llama). En un programa c, se esperaría que la persona que llama arroje este vacío * al tipo deseado y desreferencia para obtener el valor real almacenado allí. Las respuestas dadas hasta ahora parecen estar basadas en una suposición de que la función escribirá el resultado en la ubicación del puntero que pasó. Mi error, ya que no he sido demasiado específico. Lo siento. C # no es mi bolso, y ni siquiera sé si IntPtr es el camino a seguir aquí ...

Respuestas a la pregunta(4)

Su respuesta a la pregunta