如何将不透明类型与 Ctypes 绑定

How to bind opaque types with Ctypes

我正在为 Quartz 事件服务编写 OCaml 绑定[1]。

在某些情况下,我需要绑定不透明类型,如以下代码所示:

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

这里,CGEventRef 是一个指向我一无所知的 __CGEvent 结构的指针。我只通过它的接口操作这个类型。

如何使用 Ctypes 绑定此类不透明类型?

链接

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

目前我将不透明类型的指针视为空指针。

type machport_ref = unit ptr
let machport_ref = ptr void

type event_ref = unit ptr
let event_ref = ptr void

只要您不遵循指针,您就可以将其作为 c_void_p 处理。

指针只是内存地址,不管它是叫CGEventRef还是SomeOtherRandomPointer或者只是一个简单的void指针,它只需要内存地址作为参数。