Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
Calling class methods from C
Robert Rouse
1/22/2009 7:11:00 PM
Hello,
I'm trying to call a class method from C. I've tried all combinations of
rb_intern I could think of to make it work, but I've gotten nothing.
Example class
class CallTest
def go
(do something here)
end
end
rb_funcall(?, rb_intern("go"), 0);
What goes in the ? space? I know if I use Qnil there, it will call
global functions, but I'd prefer class methods.
Am I heading in the wrong direction?
Also, I'd prefer not to have to know the class name ahead of time if
possible, but if I have to require that I know what it is, I can try
passing it by name to my application.
I'm using SWIG to generate the binding.
--
Posted via
http://www.ruby-...
.
3 Answers
Jason Roelofs
1/22/2009 7:24:00 PM
0
From the top of my head:
rb_funcall(rb_const_get("CallTest"), rb_intern("go"), 0);
And if you're calling "global" methods, it's better to call it on
Kernel, where the methods are defined anyway:
rb_funcall(rb_mKernel, rb_intern("method_name"), args);
Hope that helps.
Jason
On Thu, Jan 22, 2009 at 2:11 PM, Robert Rouse <scyllinice@scyllinice.com> wrote:
> Hello,
>
> I'm trying to call a class method from C. I've tried all combinations of
> rb_intern I could think of to make it work, but I've gotten nothing.
>
> Example class
>
> class CallTest
> def go
> (do something here)
> end
>
> end
>
> rb_funcall(?, rb_intern("go"), 0);
>
> What goes in the ? space? I know if I use Qnil there, it will call
> global functions, but I'd prefer class methods.
>
> Am I heading in the wrong direction?
>
> Also, I'd prefer not to have to know the class name ahead of time if
> possible, but if I have to require that I know what it is, I can try
> passing it by name to my application.
>
> I'm using SWIG to generate the binding.
> --
> Posted via
http://www.ruby-...
.
>
>
Jason Roelofs
1/22/2009 7:28:00 PM
0
Bah, saw a small issue right when I hit "Send".
My call line works for a class defined as such:
class CallTest
def self.go
(do something here)
end
end
If you need to call an instance method on an instance of the class
CallTest, you need to of course get a hold of that instance, or make a
new one:
VALUE obj = rb_funcall(rb_const_get("CallTest"), rb_intern("new"), 0);
rb_funcall(obj, rb_intern("go"), 0);
Jason
On Thu, Jan 22, 2009 at 2:19 PM, Jason Roelofs <jameskilton@gmail.com> wrote:
> From the top of my head:
>
> rb_funcall(rb_const_get("CallTest"), rb_intern("go"), 0);
>
> And if you're calling "global" methods, it's better to call it on
> Kernel, where the methods are defined anyway:
>
> rb_funcall(rb_mKernel, rb_intern("method_name"), args);
>
> Hope that helps.
>
> Jason
>
> On Thu, Jan 22, 2009 at 2:11 PM, Robert Rouse <scyllinice@scyllinice.com> wrote:
>> Hello,
>>
>> I'm trying to call a class method from C. I've tried all combinations of
>> rb_intern I could think of to make it work, but I've gotten nothing.
>>
>> Example class
>>
>> class CallTest
>> def go
>> (do something here)
>> end
>>
>> end
>>
>> rb_funcall(?, rb_intern("go"), 0);
>>
>> What goes in the ? space? I know if I use Qnil there, it will call
>> global functions, but I'd prefer class methods.
>>
>> Am I heading in the wrong direction?
>>
>> Also, I'd prefer not to have to know the class name ahead of time if
>> possible, but if I have to require that I know what it is, I can try
>> passing it by name to my application.
>>
>> I'm using SWIG to generate the binding.
>> --
>> Posted via
http://www.ruby-...
.
>>
>>
>
Robert Rouse
1/22/2009 7:34:00 PM
0
Jason Roelofs wrote:
> Bah, saw a small issue right when I hit "Send".
>
> My call line works for a class defined as such:
>
> class CallTest
> def self.go
> (do something here)
> end
> end
>
> If you need to call an instance method on an instance of the class
> CallTest, you need to of course get a hold of that instance, or make a
> new one:
>
> VALUE obj = rb_funcall(rb_const_get("CallTest"), rb_intern("new"), 0);
> rb_funcall(obj, rb_intern("go"), 0);
>
> Jason
I tried using rb_const_get but it doesn't appear to call the method.
What should I use for those parameters (VALUE and ID)?
--
Posted via
http://www.ruby-...
.
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
Calling class methods from C
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password