私は Rubysource で時間を探していて、Ruby を C++ で拡張しようとしています。私の質問は、Rubycode で何かを見つけるのは非常に難しいため、ファイルではなくメモリから ruby-code を解釈するにはどうすればよいかということです。私の要点は、メモリから独自の暗号化された Ruby コードを解釈したいということです。Rubyファイルを解釈するための私の現在のコードは次のようになります:
bool Ruby::rb_load_file(char* szFilename)
{
::ruby_script(szFilename);
int ret = 0;
VALUE value;
rb_protect((VALUE(*)(VALUE))rb_require, (VALUE)szFilename, &ret);
value = ::rb_gv_get("$!");
value = ::rb_funcall(value, rb_intern("to_s"), 0);
if (rb_string_value_cstr(&value)[0] != '\0')
{
::rb_eval_string_protect("puts $!, $@", &ret);
return false;
}
return true;
}
しかし、ハードディスクからではなくメモリからRubyファイルをロードしたくありません(utf-8エンコーディングを遵守しているため、rb_eval_stringは機能しません)。より良い考え方のアプローチ: utf-8 エンコーディングの inclusive bom を遵守して、ルビー コードを c-string として解釈したいと考えています。