[Openmcl-devel] Carbon FFI: How can I debug this?

David Steuber david at david-steuber.com
Tue Dec 28 09:58:05 PST 2004


On Dec 24, 2004, at 5:48 PM, Gary Byers wrote:

> If you get to the  point where the third problem is the stumbling 
> block,
> that's good news: there are several potential solutions.
>
>   - change the code to create windows/menus without using .nib files
>     (hard to follow tutorials that way.)
>
>   - refer to the Cocoa example for more bloodcurdling hacks.
>
>   - find a good way to get OpenMCL into an application bundle.  Mikel
>     Evins - who posts here fairly regularly - has some tools that help
>     to simplify this process, and has used them successfully to do
>     Carbon programming in OpenMCL.

I have actually gotten as far as getting OpenMCL into an application 
bundle using Mikel Evins' Bosco code as an example.  After messing with 
the code, I fixed some bugs but I am still hung up on one thing:

(#_SetControlData (ccl::%get-ptr travel-time-field) 
#$kControlEntireControl #$kControlEditTextCFStringTag
                           (ccl::%foreign-type-or-record-size 
:<cfs>tring<r>ef :bytes) text)

yields a crash where text is a MACPTR that encapsulates a CFStringRef.  
What I actually need to pass in is a CFStringRef* but I haven't figured 
out how to do that.  I tried using %ptr-to-int which didn't work.  Then 
I realized that the int would refer to the address of the CFString, not 
the CFStringRef.  (ccl::%get-ptr text) instead of just text also 
yielded a crash.

I also tried to use rlet to allocate a MACPTR on the stack and then 
%setf-macptr.  That got me around the crash (not sure why), but it 
still didn't work even though SetControlData returned noErr.  I'm 
guessing that didn't create a CFStringRef* like I hoped.

SetControlData is declared as:

OSErr SetControlData (
    ControlRef inControl,
    ControlPartCode inPart,
    ResType inTagName,
    Size inSize,
    const void * inData
);

If I have a MACPTR that holds a CFStringRef, how can I get a MACPTR 
that holds the CFStringRef* that points to it?  If I can't, what's my 
alternative?




More information about the Openmcl-devel mailing list