2016-10-08 1 views
1

Ich bin ein OCaml verbindlich für Quartz Event Services Schreiben [1].mit Ctypes undurchsichtigen Typen binden Wie

Es gibt Fälle, wo ich wie in diesem Code undurchsichtige Typen zu binden:

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

Hier CGEventRef ist ein Zeiger auf einer __CGEvent Struktur, auf die ich nichts weiß. Ich manipuliere diesen Typ nur über seine Schnittstelle.

Wie kann ich solche undurchsichtigen Typen mit Ctypes binden?

Verbindungen

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

Antwort

1

Vorerst Zeiger auf undurchsichtigen Typen als void-Zeiger Behandlung ich.

type machport_ref = unit ptr 
let machport_ref = ptr void 

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

Ich bin mir nicht sicher, ob es ein besserer Ansatz, aber das ist, was ich in der Vergangenheit verwendet habe. – hcarty

1

Solange Sie Ehrerbietung nicht den Zeiger Sie es als c_void_p umgehen kann.

Zeiger sind nur Speicheradressen, es spielt keine Rolle, ob es CGEventRef oder SomeOtherRandomPointer oder nur ein einfacher Void-Zeiger heißt, es nimmt nur die Speicheradresse als Argument.