[MacRuby-devel] Understanding Pointer objects

Laurent Sansonetti lsansonetti at apple.com
Sun Oct 24 18:34:26 PDT 2010


Hi Mark,

Matt already replied but I thought I would give more info.

On Oct 23, 2010, at 10:04 PM, Mark Rada wrote:

> Hi,
> 
> I've been trying to play with using the Accessibility API to do some automated testing.
> 
>> From what I have researched, I have to use some C functions that often need a reference passed to the them. 
> 
> I am at a loss when trying to deal with Pointer objects. I've tried playing with them and googling it, but I just cannot figure out how to turn a pointer into a more useful type or to get what I want out of them.
> 
> For example, I can start like this:
> 
> 	framework 'Cocoa'
> 
> 	unless AXAPIEnabled() # only works if I include the parenthesis
> 		puts 'Please enable Access for Assistive Devices first'
> 		exit 2
> 	end

That's expected, in Ruby methods starting with a capital letter must be called with explicit parentheses, otherwise they are interpreted as constants.

> 	mail              = NSRunningApplication.runningApplicationsWithBundleIdentifier('com.apple.Mail').first
> 	mail_object = AXUIElementCreateApplication mail.processIdentifier 
> 
> 	names = Pointer.new :object
> 
> 	AXUIElementCopyAttributeNames mail_object, names
> 
> 
> But then how do I get the values out of the names pointer? For reference, I found the functions in AXUIElement.h.


It looks like AXUIElementCopyAttributeNames returns a CFArray by reference. So your pointer object is properly created, to retrieve the array after the call you just use

  array = names[0]

Then, it should behave like a normal Ruby array.

Laurent
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-devel/attachments/20101024/3c91a11e/attachment-0001.html>


More information about the MacRuby-devel mailing list