2009/9/14 Leonardo Otero <[email protected]>
>
> 2009/9/14 Nicolas Guzzo <[email protected]>
>
>> Hola, ya que salio el tema de rice y la integracion a c++, les comento que
>> luego de tocar algunas cositas pude compilar y utilizar rice en vc++ en
>> windows, lo estoy utilizando para embeber el interprete de ruby en mi
>> modelador 3d mutliplataforma (gtkmm, opengl, d3d, ruby!!),
>>
>
> Nico,
> Me interesa, me interesa...
> Yo estaba pensando en usar ogre.rb para algo similar.
>
> Como hiciste para hacer funcionar rice con vc++, tenes algún link?
>
> Saludos,
> Leonardo
>
> Hola Leonardo, tuve que compilar el interprete de ruby con vc++ 2008 free
edition haciendo una modificacion en el archivo env.h para que exporte un
simbolo que faltaba al linkear, te paso un paso a paso (valga la redundancia
jeje):
bajar
* http://ftp.ruby-lang.org/pub/ruby/ruby-1.8.7-p174.tar.bz2
* svn checkout svn://rubyforge.org/var/svn/rice
* en el archivo C:\ruby-1.8.7-p174\env.h cambiar
extern struct FRAME {
por:
extern __declspec(dllimport) struct FRAME {
Creo que ruby tiene una macro definida con esto pero bueno esta es una
solucion un poco dirty, habria que ver la mejor forma de hacerlo. Luego de
esto compilar ruby, (en vc2008 ir a tools->Visual studio 2008 command prompt
para tener una consola con las variables de ambiente de vc seteadas),
# cd c:\ruby-1.8.7-p174 o donde tengamos los fuentes de ruby
# win32\configure.bat
# nmake
# nmake DESTDIR=c:\ruby1.8.7 install
para compilar rice es simple, me arme un proyecto nuevo tipo libreria
estatica (ahora estoy por hacer una dinamica pero me tengo que poner a
modificar rice para que exporte los simbolos...), agregar los archivos .hpp
y .cpp de rice configurar el proyecto para que encuentre ruby, rice y linkee
con ruby... y listo... build... no deberia tirar mas que unos warnings,
adjunto un pequeño test para ver si funciona bien.
Cualquier cosa avisame, si queres te puedo pasar el .vcproject.
P.D. en estos dias me subo el modelador a un google project por si le
interesa a alguien...
--
Nico
#include <rice/VM.hpp>
#include <rice/Class.hpp>
#include <rice/Data_Type.hpp>
#include <rice/Constructor.hpp>
class Test{
float x;
public:
Test(){
x=10;
};
void set_x(float a){x=a;};
void hello(){ printf("hello x=%f\n",x);};
};
int main(int argc, char * argv[])
{
int p;
std::vector< char *> args;
args.push_back("test-nico");
args.push_back("main.rb");
Rice::VM vm(args);
vm.init_stack();
Rice::Data_Type<Test> rb_cTest =Rice::define_class<Test>("Test");
rb_cTest.define_constructor(Rice::Constructor<Test>());
rb_cTest.define_method("hello", &Test::hello);
rb_cTest.define_method("set_x", &Test::set_x);
rb_eval_string_protect ("t=Test.new; puts t.hello",&p);
return 0;
}
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar