Forum: Ruby Ruby and C++

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
SteveD (Guest)
on 2006-01-18 18:52
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
Mark V. (Guest)
on 2006-01-18 19:03
(Received via mailing list)
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.
Joe Van D. (Guest)
on 2006-01-18 19:03
(Received via mailing list)
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.
Paul B. (Guest)
on 2006-01-19 20:40
(Received via mailing list)
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
This topic is locked and can not be replied to.