In addition to extending Ruby by adding C code, you can also turn the
problem around and embed Ruby itself within your application.
Here's an example.
#include "ruby.h"
main() {
/* ... our own application stuff ... */
ruby_init();
ruby_script("embedded");
rb_load_file("start.rb");
while (1) {
if (need_to_do_ruby) {
ruby_run();
}
/* ... run our app stuff */
}
}
|
To initialize the Ruby interpreter, you need to call
ruby_init()
. But on some platforms, you may need to take special
steps before that:
#if defined(NT)
NtInitialize(&argc, &argv);
#endif
#if defined(__MACOS__) && defined(__MWERKS__)
argc = ccommand(&argv);
#endif
|
See
main.c
in the Ruby distribution for any other special defines
or setup needed for your platform.
Embedded Ruby API |
void�
|
ruby_init(")
|
� |
Sets up and initializes the interpreter. This function should be
called before any other Ruby-related functions.
|
void�
|
ruby_options(int argc, char **argv")
|
� |
Gives the Ruby interpreter the command-line options.
|
void�
|
ruby_script(char *name")
|
� |
Sets the name of the Ruby script (and $0 ) to name.
|
void�
|
rb_load_file(char *file")
|
� |
Loads the given file into the interpreter.
|
void�
|
ruby_run(")
|
� |
Runs the interpreter.
|
You need to take some special care with exception handling; any Ruby
calls you make at this top level should be protected to catch
exceptions and handle them cleanly.
rb_protect
,
rb_rescue
, and related
functions are documented on page 192.
For an example of embedding a Ruby interpreter within another program,
see also
eruby
, which is described beginning on page 147.