Hi Yehuda,

C pointers are mapped to the Pointer class. You can create Pointer objects by yourself, and if you override an Objective-C method with a C pointer argument, MacRuby will hand you an instance of Pointer.

You code could be rewritten in MacRuby as:

retValuePtr = Pointer.new(:int) # this creates a C pointer of sizeof (int) of 1 element retValuePtr[0] = 1 # assigns 1 as the first (and only) element of the pointer historyController.repository outputForArguments:['update-ref', '- mUpdate from GitX', ref.ref, dropCommit.realSha], retValue: retValuePtr
  if retValuePtr[0] == 1 # dereference the first element of the pointer
    return false
  end
  # ...

If you are overriding the outputForArguments:retValue: method in MacRuby, the last argument should be of Pointer type.

  def outputForArguments(args, retValue: retValuePtr)
    # ...
    if some_error
      retValuePtr[0] = 1
    end
  end

It is very easily to crash the program while using a Pointer object that was created by MacRuby, because MacRuby has no way to know the boundaries of the original C pointer.

Laurent

On Dec 4, 2009, at 4:16 PM, Yehuda Katz wrote:

I'm currently working with an API that sends me a memory address for an int and expects me to populate it with a value:

It essentially looks like this:

int retValue = 1;
[historyController.repository outputForArguments:[NSArray arrayWithObjects:@"update-ref", @"-mUpdate from GitX", [ref ref], [dropCommit realSha], NULL] retValue:&retValue];
if (retValue) return NO;

I am writing code that implements outputForArguments:retValue:, but it seems that MacRuby hands me an opaque primitive that I can't use. When I try to do anything with it, I get EXC_BAD_ACCESS.

Any ideas?

Yehuda Katz
Developer | Engine Yard
(ph) 718.877.1325
_______________________________________________
MacRuby-devel mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

_______________________________________________
MacRuby-devel mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

Reply via email to