From: "Simon Kröger" Date: 2006-03-11T20:10:30+09:00 Subject: Re: C++ DLL example Hi Mark, it's not that hard, your cpp file should/could look like this: --------------------------------------------------------------------- #include "ruby.h" #include #include using namespace std; static void greet(const string& name) { cout << "Hello " << name << endl; } static VALUE rb_greet(VALUE self, VALUE name){ greet(STR2CSTR(name)); return Qnil; } void Init_RubyDll() { rb_define_global_function("greet", (VALUE(*)(ANYARGS))rb_greet, 1); } --------------------------------------------------------------------- Add this to a new dll project, add the path to ruby.h to the project settings and link against msvcrt-ruby18.lib. Finally you have to export the Init_XXX (XXX has to be equal to the name of your Dll) function. I usually add a /EXPORT:Init_RubyDll to the command line options of the linker. After doing so i could execute C:\>ruby -e "require 'RubyDll'; greet 'Mark '" Hello Mark Hope that helps. cheers Simon p.s.: one gotcha left: The ruby in the one-click-installer is compiled with vc6, linking to libs from another version might be risky. Mark Volkmann schrieb: > Can someone point me to a simple example of calling a C++ function from Ruby? > I know how to do it with SWIG, but I'm trying to learn how to do it > without SWIG. > I'd like to do this under Windows and have the C++ code in a DLL. > No Windows APIs will be invoked. I just want to do something simple in > C++ like this > > static void greet(const string& name) { > cout << "Hello " << name << endl; > } > > and invoke the greet function from Ruby. > > I know how to build a DLL using VC++ 8. > I suspect the issue is that I don't have the right setup in my .cpp file. > > -- > R. Mark Volkmann > Partner, Object Computing, Inc. > >