# Calling C functions from Embedded Ruby Interpreter

**URL:** <https://www.ruby-forum.com/t/calling-c-functions-from-embedded-ruby-interpreter/135717>\
**Category:** Ruby\
**Created:** [April 24, 2008, 1:07pm UTC](https://www.ruby-forum.com/t/calling-c-functions-from-embedded-ruby-interpreter/135717 "2008-04-24T13:07:06Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![mohits](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/bbe5ce/32.png) [@mohits](https://www.ruby-forum.com/u/mohits)\
**Post date:** [April 24, 2008, 1:07pm UTC](https://www.ruby-forum.com/t/calling-c-functions-from-embedded-ruby-interpreter/135717/1 "2008-04-24T13:07:06Z")

</div>

Hi Everyone,

I know the subject line is quite a mouthful! Sorry about that.

I’ve managed to embed a Ruby interpreter into my application and I can  
call Ruby functions from the code in my application. It works fine and  
returns results to me as expected. I can also ask it to run a script  
for me.

Now, I’d like to get it to do some automation for me. My project starts  
up, loads a few things, sets a few properties, etc. I’d like to be able  
to automate this using the embedded interpreter. I expect the code in  
the script may be as simple as:  
set\_default\_color(0x00ff0000)  
set\_screen\_size(800,600)  
…and so on.

Now, as I understand it, in my application, I need to these C functions  
in it:  
VALUE set\_default\_color (VALUE color)  
VALUE set\_screen\_size (VALUE w, VALUE h)  
… and so on.

I just don’t know what to do next! I’m not even sure what I should  
search for - should I like at how to create an extension? Does that  
mean that I need to get into the mkmf, etc. and compile some things for  
it to work (I shudder because my primary environment is Borland C++  
Builder/ Turbo C++ and I had enough worries getting the interpreter to  
be compiled in).

To use the script from the embedded interpreter, can I just ask it to  
run the script?

I’m sorry if some of the questions/ explanations are a bit vague. Any  
help/ direction is greatly appreciated.

Thanks  
Mohit.

---

<div class="post-metadata">

**Author:** ![mohits](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/bbe5ce/32.png) [@mohits](https://www.ruby-forum.com/u/mohits)\
**Post date:** [April 24, 2008, 1:52pm UTC](https://www.ruby-forum.com/t/calling-c-functions-from-embedded-ruby-interpreter/135717/2 "2008-04-24T13:52:11Z")

</div>

Hello Again,

I found that the example on this page:  
[http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/155482](http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/155482)

does have the necessary to help me connect the dots. I was staring at  
the example for quite a while before I sent the email out, but I guess I  
just didn’t see it.

Thanks anyway.

Cheers,  
Mohit.  
4/24/2008 | 7:48 PM.

---

<div class="post-metadata">

**Author:** ![mohits](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/bbe5ce/32.png) [@mohits](https://www.ruby-forum.com/u/mohits)\
**Post date:** [April 24, 2008, 2:37pm UTC](https://www.ruby-forum.com/t/calling-c-functions-from-embedded-ruby-interpreter/135717/3 "2008-04-24T14:37:03Z")

</div>

- Mohit S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) (13:06) schrieb:

> I know the subject line is quite a mouthful! Sorry about that.

I don’t see anything wrong in the subject line.

> I’ve managed to embed a Ruby interpreter into my application and I can  
> call Ruby functions from the code in my application. It works fine and  
> returns results to me as expected. I can also ask it to run a script  
> for me.

Grats.

> I just don’t know what to do next!  
> Well, the Pickaxe has a chapter on this stuff.

Try

rb\_define\_global\_function(“set\_default\_color”, &set\_default\_color, 1)

There also is rb\_define\_module\_function(VALUE model, char \*name,  
VALUE(\*func)(), int argc) and rb\_define\_singleton\_method taking the same  
arguments. I never tried any of these, and don’t quit know how to tell a  
module function from a singleton function from a system function. (The  
last one is in Kernel, the other two can be in any module or class.)

mfg, simon … l

---

<div class="post-metadata">

**Author:** ![mohits](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/bbe5ce/32.png) [@mohits](https://www.ruby-forum.com/u/mohits)\
**Post date:** [April 27, 2008, 2:07pm UTC](https://www.ruby-forum.com/t/calling-c-functions-from-embedded-ruby-interpreter/135717/4 "2008-04-27T14:07:06Z")

</div>

Hi Simon

First, my apologies on the late response. Thanks for your email  
relating to my request.

Simon K. wrote:

> - Mohit S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) (13:06) schrieb
> 
> > I know the subject line is quite a mouthful! Sorry about that.
> 
> I don’t see anything wrong in the subject line.

Haha, thanks for that!

> > set\_screen\_size(800,600)
> 
> last one is in Kernel, the other two can be in any module or class.)

Ya, actually wisdom strikes soon after one requests for help. I did  
find the necessary stuff in one of the links that I had been staring at  
for a while… and after that, it was easy enough to connect up the dots  
to get things moving.

Thanks for the example. I followed the procedure for defining a module  
and then creating the functions within it. Not sure if I eventually  
want it to be that way but I know enough now to keep exploring.

> mfg, simon … l

Might I ask what “mfg” stands for?

Thanks again.

Cheers,  
Mohit.  
4/27/2008 | 7:53 PM.

---

<div class="post-metadata">

**Author:** ![mohits](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/bbe5ce/32.png) [@mohits](https://www.ruby-forum.com/u/mohits)\
**Post date:** [April 27, 2008, 2:31pm UTC](https://www.ruby-forum.com/t/calling-c-functions-from-embedded-ruby-interpreter/135717/5 "2008-04-27T14:31:20Z")

</div>

Hi –

On Sun, 27 Apr 2008, Mohit S. wrote:

> > I don’t see anything wrong in the subject line.
> > 
> > > 
> > 
> > VALUE(\*func)(), int argc) and rb\_define\_singleton\_method taking the same
> 
> Thanks for the example. I followed the procedure for defining a module and  
> then creating the functions within it. Not sure if I eventually want it to  
> be that way but I know enough now to keep exploring.
> 
> > mfg, simon … l
> 
> Might I ask what “mfg” stands for?

Mit freundlichen GrÃ¼ÃŸen (with friendly greetings – more or less like  
“Best wishes”).

David

---

<div class="post-metadata">

**Author:** ![mohits](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/bbe5ce/32.png) [@mohits](https://www.ruby-forum.com/u/mohits)\
**Post date:** [April 27, 2008, 2:48pm UTC](https://www.ruby-forum.com/t/calling-c-functions-from-embedded-ruby-interpreter/135717/6 "2008-04-27T14:48:43Z")

</div>

Mohit S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

> > “Best wishes”).
> > 
> > David
> 
> Thanks David! That’s why I love this list - you learn a little bit  
> about languages all the time 🙂

Also, you could improve you google-fu. You’d find nice tools such as:  
[http://www.silmaril.ie/cgi-bin/uncgi/acronyms?MFG](http://www.silmaril.ie/cgi-bin/uncgi/acronyms?MFG)

---

<div class="post-metadata">

**Author:** ![mohits](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/bbe5ce/32.png) [@mohits](https://www.ruby-forum.com/u/mohits)\
**Post date:** [April 27, 2008, 2:34pm UTC](https://www.ruby-forum.com/t/calling-c-functions-from-embedded-ruby-interpreter/135717/7 "2008-04-27T14:34:16Z")

</div>

David A. Black wrote:

> David

Thanks David! That’s why I love this list - you learn a little bit  
about languages all the time 🙂

Cheers,  
Mohit.  
4/27/2008 | 8:32 PM.

---

<div class="post-metadata">

**Author:** ![mohits](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/bbe5ce/32.png) [@mohits](https://www.ruby-forum.com/u/mohits)\
**Post date:** [April 27, 2008, 2:59pm UTC](https://www.ruby-forum.com/t/calling-c-functions-from-embedded-ruby-interpreter/135717/8 "2008-04-27T14:59:25Z")

</div>

Hi,

On Sun, Apr 27, 2008 at 10:40 PM, Pascal B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> Also, you could improve you google-fu. You’d find nice tools such as:  
> [http://www.silmaril.ie/cgi-bin/uncgi/acronyms?MFG](http://www.silmaril.ie/cgi-bin/uncgi/acronyms?MFG)

Hmm, I tried something similar, but I suppose the German answer was one  
I  
skipped over subconsciously. We all learn something new!

Cheers,  
Arlen.

---

<div class="post-metadata">

**Author:** ![mohits](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/bbe5ce/32.png) [@mohits](https://www.ruby-forum.com/u/mohits)\
**Post date:** [April 27, 2008, 2:49pm UTC](https://www.ruby-forum.com/t/calling-c-functions-from-embedded-ruby-interpreter/135717/9 "2008-04-27T14:49:53Z")

</div>

Pascal B. wrote:

> Also, you could improve you google-fu. You’d find nice tools such as:  
> [http://www.silmaril.ie/cgi-bin/uncgi/acronyms?MFG](http://www.silmaril.ie/cgi-bin/uncgi/acronyms?MFG)

Point taken, Pascal. Sorry about that.

It was just a friendly question piggy-backed to my response to the  
original reply. But, I understand what you mean. I could have avoided  
the responses that followed.

By the way, thanks for the link - it’s quite neat!

Mfg,  
Mohit.
