メソッドの実行結果を受け取り、結果を表示します。
フォームにメモとボタンをを貼り付けます。
Unit1.h の private に次のメソッドを追加します。
__declspec(dllexport) char* (*rb_string_value_cstr)(volatile unsigned long*);
Unit1.cpp の TForm1::TForm1(TComponent* Owner) に次の行を追加します。
rb_string_value_cstr = (char* (*)(volatile unsigned long*))GetProcAddress(hDll,"rb_string_value_cstr");
ボタンのイベントを追加します。
void __fastcall TForm1::Button3Click(TObject *Sender)
{
if (!hDll)
{
Application->MessageBox("msvcrt-ruby18.dll が見つかりませんでした。",
"DLL エラー",
MB_ICONSTOP | MB_OK);
return;
}
//Rubyインタプリタの初期化
ruby_init();
//スクリプトの実行
unsigned long value = rb_eval_string("'実行結果'");
//実行結果の文字列を取得する
AnsiString result = rb_string_value_cstr(&value);
Memo1->Lines->Add(result);
//スクリプトの実行
value = rb_eval_string("File.open('test.rb', 'r' ).read");
//実行結果の文字列を取得する
TStringList* list = new TStringList();
list->Text = rb_string_value_cstr(&value);
Memo1->Lines->Add(list->Text);
delete list;
//Rubyインタプリタのクリーンアップ
ruby_cleanup(0);
}
ボタンをクリックして、メモに「実行結果」と「test.rb」の内容が表示されたら成功です。