开发者

Accessing an ObjC object from a C function callback

I'm playing around a bit with global hot keys in Carbon, and I registered a hot key. When the hot key is pressed, this function is called:

OSStatus myHotKeyHandler(EventHandlerCallRef nextHandler, EventRef anEvent, vo开发者_运维百科id *userData) {
    ...
}

This function is in the same file as my app delegate's definition. How do I now call an ObjC method on my delegate in that function?

[self aMethod];

I cant add a void* (to be a pointer to my class instance) to the C function, because I am not the one calling it.

I tried to convert the method into a class method and then call it with [AppDelegate aFunction], which works but then I cant use my instance variables!


You're reinventing the wheel. Use a wrapper:

http://github.com/davedelong/DDHotKey

well perhaps not a wheel, since hot keys aren't "trivial" concepts. maybe you're reinventing a differential? or something? ;)


Give the pointer to your class instance as parameter for userData when you register your event handler. You will then get this pointer back inside the handler as userData.


Example code

InstallApplicationEventHandler(&MyHotKeyHandler,1,&eventType,(void *)self,NULL);
...

OSStatus MyHotKeyHandler(EventHandlerCallRef nextHandler,EventRef theEvent,
                         void *userData)
{
    [(yourAppDelegate *)userData dosomething];
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜