LoginSignup
2
2

More than 5 years have passed since last update.

mrubyにCで追加したメソッドで文字列を返すには

Last updated at Posted at 2015-02-20

背景

C言語で文字列を扱う場合、char*型を使うが、mrubyにC言語でメソッドを追加するような
場面では、当然mruby内で扱える型mrb_valueを返す必要がある。

要するにこのchar*からmruby内で扱える文字列型に変換する方法が、自分のGoogle力ではなかなか探しだせなかった。

メソッドで受け取った引数を加工して返す系のコードはごっそり見つかったけど、メソッド内のCの文字列を単純に返すというものがなかなか見つからなかった。

mrubyでC APIで取得した文字列を返すには

mrb_str_newを使えば出来た。

文字列の先頭アドレスと長さを指定する必要ある。

以下、謎のサンプルコード。

#ifdef __APPLE__
mrb_value get_procpathname(mrb_state* mrb, mrb_value self)
{
    int ret;
    pid_t pid;
    char pathbuf[PROC_PIDPATHINFO_MAXSIZE];

    pid = getpid();
    ret = proc_pidpath(pid, pathbuf, sizeof(pathbuf));

    return mrb_str_new(mrb,pathbuf,strlen(pathbuf));
}
#endif

関連記事

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2