如何从桥接函数中获取c函数指针?

时间:2014-08-19 09:25:42

标签: objective-c swift

我正在尝试使用CGEventTapCreate(...)在swift中设置事件点按。这会将CGEventTapCallback函数指针作为其参数之一。

据我所知,在当前测试版中没有办法将swift函数作为c函数指针传递。


我做的是像往常一样在Objective C中编写回调:

// callback.h

CGEventRef callback(CGEventTapProxy proxy, CGEventType type, CGEventRef event,
        void *refcon);

// callback.m

CGEventRef callback(CGEventTapProxy proxy, CGEventType type, CGEventRef event,
        void *refcon)
{
    return NULL;
}

然后将导入添加到我的桥接标题:

// project-Bridging-Header.h

#import "callback.h"

这正确地将函数暴露给swift。但是,它通过将函数的类型转换为swift函数来实现。

因此,我仍然无法将其作为CGEventTapCreate(...)

的参数提供

是否有内置函数将桥接函数转换为函数指针?

1 个答案:

答案 0 :(得分:1)

我在这里添加了一种解决方法,但我不喜欢它。

基本上,您只需直接公开函数指针:

// callback.h

CGEventRef callback(CGEventTapProxy proxy, CGEventType type, CGEventRef event,
        void *refcon);
extern CGEventTapCallBack callback_ptr;

// callback.m

#import callback.h

CGEventTapCallBack callback_ptr = callback;

CGEventRef callback(CGEventTapProxy proxy, CGEventType type, CGEventRef event,
        void *refcon)
{
    return NULL;
}