Dada esta declaración C API, ¿cómo se importaría a C#?Cómo importar void * C API en C#?
int _stdcall z4ctyget(CITY_REC *, void *);
que he podido llegar hasta aquí:
[DllImport(@"zip4_w32.dll",
CallingConvention = CallingConvention.StdCall,
EntryPoint = "z4ctygetSTD",
ExactSpelling = false)]
private extern static int z4ctygetSTD(ref CITY_REC args, void * ptr);
Naturalmente en C# el "void *" no se compila.
Algunos de Google indican que debe traducirse como "objeto". Lo cual parece que debería funcionar. Pero otros indican que "Void * se llama un puntero a la función en términos C/C++ que en términos C# es un delegado". Eso no tiene mucho sentido aquí, ¿a qué debería delegar? Algunas llamadas similares para otras API encontradas a través de Google usan otras funciones en la respectiva API. Pero en esta API ninguna otra llamada tendría sentido.
La documentación de la llamada muestra un ejemplo:
z4ctyget(&city, “00000”);
que parece mostrar que incluso un valor estático se podría pasar.
Se compilará con el objeto en lugar del vacío *. No sé si esto es correcto y no he tenido la oportunidad de probarlo (problema de licencia).
Supongo que es IntPtr –
¿Qué piensas hacer con el puntero una vez que lo tienes? Supongo que todo lo que necesita es la estructura CITY_REC, y tiene la intención de ignorar 'ptr'? –
@Erik - Bueno, no estoy seguro. La documentación disponible no es clara sobre el propósito del param. –