Subject:
[ruby-ffi] MemoryPointers for ints?
From:
Chuck Remes
Date:
5/6/10 12:05 PM
To:
ruby-ffi@googlegroups.com

I'm just getting started with FFI, so forgive the newbie questions.

I have a function prototype like so:

int zmq_setsockopt (void *socket, int option_name, const void *option_value, size_t option_len);

I've wrapped the library containing this function using the following #attach_function call:

attach_function :zmq_setsockopt, [:pointer, :int, :pointer, :int], :int

In C, this is called like this:

setsockopt (context, ZMQ_SUBSCRIBE, "xy.z\x00", 5);

OR

int64_t rate = 10000;
setsockopt (context, ZMQ_RATE, &rate, sizeof (rate));

In my ruby code, I think I need to create a MemoryPointer of some kind to pass as the 3rd parameter. The examples show the third parameter is sometimes an integer (100) or a string ("topic.string").

I know how to create a pointer from a string using MemoryPointer.from_string("topic.string") but I don't see how to handle the case when an integer is passed in.

Related to this, I don't see how to execute #sizeof.

I promise to update the wiki if the answers can prove generally useful.

cr