Ruby and C++


#1

hey everyone,
im trying to write a script as well as a program each of which can
communicate with one another. the script should be able to have access
to the class in my c++ code. just a simple class with a couple of
variable and some accessors and modifiers for them. i want to be able
to create an object of that class type in the script and call the
classes functions in order to manipulate the data. at this point i can
create an object in the script and it seems that i can modify the object
through the set methods, but when i call the get method for that
function it get an error saying it is expecting the class type as the
return type(i assume thats what the error means… “in ‘getInt’: wrong
type - expected DummieClass”)
for all of my set methods i return self. for the get methods i return a
VALUE object which should be holding the value of the class member i am
working with.


c++ code:

static VALUE _wrap_get_int(VALUE self)
{
GET_MY_CLASS(self); //a macro that returns an instance pointer of
my class

//this function call returns a VALUE after converting the c++ int
return GetRubyInt(pDummie->getInt());

}


ruby script:

obj = SimpleExt::Dummie.new(12,3.4, “my String”)
obj.setInt(100)
x = obj.getInt()

print x


it seems to be crashing out when it gets to the line x = obj.getInt().
can anyone tell me whats wrong with this, or am i going about this the
wrong way? im thinking that i may have to change my c++ code around,
but i dont know. if anyone could lend some adive i would appreciate it.
thanks
steveD


#2

I can’t speak to the specific problem you’re running into. However, I
can recommend using SWIG for this sort of thing. I think it makes this
kind of integration much easier. I created a presentation on this that
you can read at http://www.ociweb.com/jnb/jnbJan2006.html. It mostly
focuses on using SWIG to invoke C++ from Java, but at the end there is
a Ruby example.


#3

On 1/18/06, SteveD removed_email_address@domain.invalid wrote:

return type(i assume thats what the error means… "in ‘getInt’: wrong
GET_MY_CLASS(self); //a macro that returns an instance pointer of
obj.setInt(100)
x = obj.getInt()

print x


it seems to be crashing out when it gets to the line x = obj.getInt().
can anyone tell me whats wrong with this, or am i going about this the
wrong way? im thinking that i may have to change my c++ code around,
but i dont know. if anyone could lend some adive i would appreciate it.

It would help if you could post the entire code. Or at least, some
sample code that exhibits the same behavior.


#4

On Thu, Jan 19, 2006 at 01:16:14AM +0900, SteveD wrote:

classes functions in order to manipulate the data. at this point i can
create an object in the script and it seems that i can modify the object
through the set methods, but when i call the get method for that
function it get an error saying it is expecting the class type as the
return type(i assume thats what the error means… “in ‘getInt’: wrong
type - expected DummieClass”)

I suspect that it is the GET_MY_CLASS line that is raising the
exception, so this probably has nothing to do with your return value.

As someone else pointed out, posting a complete minimal solution that
reproduces the problem along with the exact output and the expected
output is usually helpful in tracking these things down (plus sometimes
when I put something like that together, I find the problem before I
even post!)

Paul