Ruby‎ > ‎Tips‎ > ‎

インタープリターDLLを直接使う

  • RubyのWindowsアプリケーションを作ったけれど ruby.exe を呼ぶバッチファイルを用意するのはダサいよね
  • argc/argvを決め打ちしたruby.exeを用意すればバッチファイルはいらないよね
という結論に至った方には以下のコードが参考になるかもしれません。Ruby 1.9.2-p0で動作を確認しました。

  1. #define WIN32_LEAN_AND_MEAN
  2. #include <windows.h>
  3. #include <tchar.h>
  4. #include <ruby.h>
  5.  
  6. int APIENTRY _tWinMain( HINSTANCE, HINSTANCE, LPTSTR, int )
  7. {
  8.     // 初期化はダミーのargc/argvで
  9.     char* dummy_argv[] = { "" };
  10.     int dummy_argc = 1;
  11.     ruby_sysinit( &dummy_argc, (char***)&dummy_argv );
  12.     ruby_init();
  13.  
  14.     // ここは各自お好みで
  15.     char* argv[] = {
  16.         "RubyksCube.exe",
  17.         "-C./lib",
  18.         "-I.",
  19.         "-I./lib",
  20.         "--disable-gems",
  21.         "--disable-rubyopt",
  22.         "Main.rb"
  23.     };
  24.     int argc = sizeof(argv) / sizeof(argv[0]);
  25.     return ruby_run_node( ruby_options(argc, argv) );
  26. }
Visual Studio 2010 でビルドした ruby 1.9.2-p0 が D:\ruby19 以下にインストール済みとして…
  • 追加のインクルード ディレクトリには D:\ruby19\include\ruby-1.9.1 と追記
  • 追加のライブラリ ディレクトリには D:\ruby19\lib と追記
  • 追加の依存ファイルには msvcr100-ruby191.lib 
と設定した上でビルドします。

Comments