From ruby-ext-admin@netlab.co.jp Fri Aug 18 17:00:38 2000 Received: from voscc.nagaokaut.ac.jp (voscc.nagaokaut.ac.jp [133.44.1.100]) by blade.nagaokaut.ac.jp (8.8.8/8.8.8/Debian/GNU) with ESMTP id RAA05062; Fri, 18 Aug 2000 17:00:38 +0900 Received: from hoyogw.netlab.co.jp (postfix@hoyogw.netlab.co.jp [210.251.121.20]) by voscc.nagaokaut.ac.jp (8.9.3/3.7W) id RAA15630; Fri, 18 Aug 2000 17:00:33 +0900 (JST) Received: from hoyogw.netlab.co.jp (localhost [127.0.0.1]) by hoyogw.netlab.co.jp (Postfix) with ESMTP id DFA0F46CC9; Fri, 18 Aug 2000 17:00:30 +0900 (JST) Delivered-To: ruby-ext@netlab.co.jp Date: Fri, 18 Aug 2000 17:03:26 +0900 From: "T.Shimomura" Reply-To: ruby-ext@netlab.co.jp Subject: [ruby-ext:01191] Re: rb_str_new2() =?ISO-2022-JP?B?GyRCJE5GMDpuGyhC?= To: ruby-ext@netlab.co.jp (ruby-ext ML) Message-Id: <20000818170100.4E89.REDBUGML@netlife.gr.jp> In-Reply-To: <20000818074450L.aamine@mail.u-netsurf.ne.jp> References: <20000818043328.80E0.REDBUGML@netlife.gr.jp> <20000818074450L.aamine@mail.u-netsurf.ne.jp> X-ML-Name: ruby-ext X-Mail-Count: 01191 X-MLServer: fml [fml 3.0pl#17]; post only (only members can post) X-ML-Info: If you have a question, send e-mail with the body "help" (without quotes) to the address ruby-ext-ctl@netlab.co.jp; help= X-Mailer: Becky! ver. 2.00 (beta 25) Mime-Version: 1.0 Content-Type: text/plain; charset="ISO-2022-JP" Content-Transfer-Encoding: 7bit Precedence: bulk Lines: 82 Sender: ruby-ext-admin@netlab.co.jp On Fri, 18 Aug 2000 07:44:50 +0900 Minero Aoki wrote: > > rb_str_new2( "abcdefg\\#12345678\\" ) > > rb_str_new2( "abcdefg\\?12345678\\" ) > > > > 上の例のうち、1行目は問題ないのですが、2行目はうまくいかないのです。 > > ぼくの手元の環境だとなんの問題もないんですけど、どういうふうにうまく > いかないんですか? たぶん実際の例をちょっと加工してると思うんですが、 > その元のコードのミスの可能性の方がかなり高いです。 > > もし(C の)リテラル文字列として書いてるなら、トライグラフに > ひっかかってるとか。 > > ??= ??/ ??' ??( ??) ??! ??< ??> ??- どうやら、? は関係なかったようです。すみませんでした。 Ruby へモジュール・メソッドを定義する過程で、なにかミスを しているんだと思いますが、原因がちっともわかりません。 詳細を記しますので、よろしければご指導ください。 こんな感じで、Ruby にモジュールを追加しています。 // プロトタイプ VALUE rb_becky_GetCurrentMail( VALUE self ); // 現在のメールの識別子を得る VALUE rb_becky_GetCurrentMail( VALUE self ) { VALUE str; char *ptr; // bka.GetCurrentMail() はメールID文字列へのポインタを返す ptr = (char *)bka.GetCurrentMail(); str = rb_str_new2( ptr ); // Windows のメッセージボックスを表示 MessageBox( NULL , RSTRING(str)->ptr , NULL , MB_OK ); return( str ); } // Ruby にモジュールを追加する部分(抜粋) module = rb_define_module( "BECKY" ); rb_define_module_function( module , "currentmail" , (unsigned long(*)())rb_becky_GetCurrentMail , 0 ); 上の関数をコールしたあと、以下のテキストを rb_eval_string_protect() します。 a = BECKY.currentmail() f = open( "output.txt" , "w" ) f.print( a ) f.close() すると、「38d7fc16.mb\Ruby-Ext\?99AEE66」という内容のメッセージ ボックスが表示されます。 この文字列は、取得したい内容と完全に一致しています。 つまり、BECKY モジュールのメソッドは正しく呼び出され、目的の文字列 を Ruby の文字列に問題なく変換しています。 が、3行目で作成されるはずのファイルが作成されません。 どうやら、1行目の処理が正常に終了していないようです。 rb_eval_string_protect() の status には、TAG_RAISE が入っています。 が、どこをどう直せばいいのか、皆目見当がつきません。 どなたかご教示ください。よろしくお願いします。 -- redbug@netlife.gr.jp http://www.netlife.gr.jp/