[Pyobjc-dev] WiiRemote.framework successfully wrapped!
Brought to you by:
ronaldoussoren
|
From: Ian J. <enj...@gm...> - 2008-06-12 17:42:49
|
After a grueling Saturday coding session, I have finally placed the last puzzle piece for wrapping the DarwiinRemote WiiRemote.framework. You can see the resulting code at http://enja.org/enjapen (check out WiiMote.py for the informal_protocol) I want to mention that I think this fix should be documented, as I could find NO example anywhere in the docs or on any blog on the internet. The main hang up was wrapping an interface method for the WiiRemoteDelegate: > - (void) rawIRData: (IRData[4]) irData; > Where the IRData is a struct defined as: typedef struct { > int x, y, s; > } IRData; > with IRData defined in python like: IRData = objc.createStructType("IRData", "iii", ["x", "y", "s"]) So our python function needs to accept an array of 4 IRData structs. The signature for this needs to be: v@:n^[4{IRData=iii}] > Which we define in the informal_protocol (or with python 2.4/2.5 using @objc.selector(...) ) The problem is, nowhere is it documented that "n^" is necessary. I figured it out by dumb luck and a slightly intuitive (but probably wrong) feeling about arrays being pointers in C (true in objective-c?) This page gave me good info: http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Articles/chapter_13_section_9.html but little did I know what a "method encoding" was. I guess "n" means this object is given as input. I'm only guessing, but if I were trying to wrap a function that returned an array (which you can't do, just like C, I guess you would get a pointer?) you would have to use "o^"? I know part of this is my fault for being new to Objective-C and having a shallow understanding of C, but I'm not the only one who could have been served by one example of wrapping a function that has a complex data type. I hope this helps others who might have wrestled with this! I want to extend a BIG thanks to the pyobjc team for letting me stay in python paradise when making apps on the mac :) -- Ian Johnson Ignorance is Piss. |