从C函数回调中访问ObjC对象
问题描述:
我在Carbon中使用全局热键玩了一下,我注册了一个热键。当按下热键,调用该函数:从C函数回调中访问ObjC对象
OSStatus myHotKeyHandler(EventHandlerCallRef nextHandler, EventRef anEvent, void *userData) {
...
}
此功能是在同一个文件作为我的应用程序委托的定义。我现在如何在该函数的委托上调用一个ObjC方法?
[self aMethod];
我不能添加void*
(是一个指向我的类的实例)的C函数,因为我不是一个调用它。
我试图将该方法转换为一个类方法,然后用[AppDelegate aFunction]
调用它,它的工作原理,但我不能使用我的实例变量!
答
注册事件处理函数时,将指向您的类实例的指针作为参数userData
。然后你会将这个指针返回到处理程序中作为userData
。
答
你正在重新发明*。使用包装:
http://github.com/davedelong/DDHotKey
好也许不是一个轮,因为热键并非“微不足道”的概念。也许你正在重新创造差异?或者其他的东西? ;)
+0
感谢的是做到了也!我现在使用该包装 – 2011-06-02 20:42:17
答
示例代码
InstallApplicationEventHandler(&MyHotKeyHandler,1,&eventType,(void *)self,NULL);
...
OSStatus MyHotKeyHandler(EventHandlerCallRef nextHandler,EventRef theEvent,
void *userData)
{
[(yourAppDelegate *)userData dosomething];
}
现在它的工作,谢谢。但我想我切换到包装 – 2011-06-02 20:42:50