Compte tenu de cette déclaration d'API C, comment serait-il importé en C#?Comment faire pour importer void * C API en C#?
int _stdcall z4ctyget(CITY_REC *, void *);
Je suis en mesure d'obtenir jusqu'ici:
[DllImport(@"zip4_w32.dll",
CallingConvention = CallingConvention.StdCall,
EntryPoint = "z4ctygetSTD",
ExactSpelling = false)]
private extern static int z4ctygetSTD(ref CITY_REC args, void * ptr);
naturellement en C# le "vide *" ne compile pas.
Certains googling indique qu'il devrait être traduit comme "objet". Ce qui semble devoir fonctionner. Mais d'autres indiquent que "Void * est appelé un pointeur de fonction en C/C++ qui en termes C# est un délégué". Cela n'a pas beaucoup de sens ici, en quoi déléguerait-il? Certains appels similaires pour d'autres API trouvées dans Googling utilisent d'autres fonctions dans l'API respective. Mais dans cette API, aucun autre appel n'aurait de sens.
La documentation de l'appel montre un exemple:
z4ctyget(&city, “00000”);
qui semble montrer que même une valeur statique pourrait être adoptée.
Il compilera avec l'objet à la place du vide *. Je ne sais pas si c'est juste et je n'ai pas eu l'occasion de le tester (problème de licence).
Ma proposition est IntPtr –
Qu'avez-vous l'intention de faire avec le pointeur une fois que vous l'avez? Je suppose que tout ce dont vous avez besoin est la structure CITY_REC, et vous avez l'intention d'ignorer 'ptr'? –
@Erik - Eh bien, je ne suis pas sûr. La documentation disponible n'est pas claire sur l'objectif du param. –