2016-10-08 1 views
1

J'écris une liaison OCaml pour Quartz Event Services [1].Comment lier des types opaques avec Ctypes

Il y a des cas où je dois lier les types opaques comme dans ce code:

typedef CGEventRef _Nullable (*CGEventTapCallBack)(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *userInfo); 

Ici, CGEventRef est un pointeur sur une structure __CGEvent sur laquelle je ne sais rien. Je manipule ce type seulement à travers son interface.

Comment puis-je lier de tels types opaques en utilisant Ctypes?

Liens

  1. https://developer.apple.com/reference/coregraphics/1658572-quartz_event_services?language=objc

Répondre

1

Pour l'instant je traite des pointeurs sur les types opaques comme pointeurs vides.

type machport_ref = unit ptr 
let machport_ref = ptr void 

type event_ref = unit ptr 
let event_ref = ptr void 
+1

Je ne suis pas sûr s'il y a une meilleure approche, mais c'est ce que j'ai utilisé dans le passé. – hcarty

1

Tant que vous ne déférerez pas le pointeur, vous pouvez le gérer comme un c_void_p. Les pointeurs ne sont que des adresses mémoire, peu importe qu'ils s'appellent CGEventRef ou SomeOtherRandomPointer ou simplement un simple pointeur vide, ils ne prennent en argument que l'adresse mémoire.