Necesito llamar a una función desde una API contenida en un dll. prototipo de la función se ve de la siguiente manera ....Cómo cancelar void * con la invocación de plataforma
int func(char* name, void* value);
donde el contenido del valor del puntero pueden referirse a cualquier tipo depende del nombre pasado. No estoy seguro de cómo configurar el puerto de entrada de Dll para corregir este vacío *. Ihave estado experimentando con IntPtr que parece funcionar cuando planees el valor es un entero, pero no puedo recuperar los valores correctamente para flotadores etc.
Estoy tratando de importar la función como esta ...
[DllImport("dllname.dll", CharSet = CharSet.Ansi)]
public static extern int func(string name, ref IntPtr value);
nota pls ese 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 el que llama). En un programa C, se esperaría que la persona que realiza la llamada emitiera este vacío * al tipo deseado y la desreferencia para obtener el valor real almacenado allí. Las respuestas dadas hasta ahora parecen basarse en la suposición de que la función escribirá el resultado en la ubicación del puntero pasado. Mi culpa no fue muy específica. Lo siento. C# no es mi bolsa, y ni siquiera sé si IntPtr es el camino a seguir aquí ...
Debería haber sido más específico, lo siento. El valor IntPtr es una salida. En el caso de esta función, será un puntero a un valor que puede ser de cualquier tipo. Se espera que la persona que llama sepa el tipo que intentan recuperar. – matt
@matt - la respuesta sigue siendo la misma - ver edición. –
@matt - echa un vistazo a @ Hans responde y comenta: esta es su mejor apuesta. –