まつもと ゆきひろです

In message "[ruby-ext:00591] Re: unexpected local variable"
    on 99/11/29, ymsd <ymsd / mail.m-net.ne.jp> writes:

|>あやしい部分を見付けることくらいはできるでしょう。
|
|とのお言葉に甘えてソースの、その部分と関係ありそうなところを
|http://www.m-net.ne.jp/~ymsd/be/unexpect.html
|に置いておきました。(たぶんユーザ数が絶対的に少ないと
|思うのでばらまくのはやめときます)

ちょっと見てみたのですが、back_to_parentからのソースを見ても
BView::MessageReceivedを起動するまでの間にこのメッセージが出
る理由は全然分かりませんでした。なんらかのRubyプログラムを実
行しないとこのメッセージは出ないと思うんですが。あるいは、も
しかするとBView::MessageReceivedの中でまだRubyプログラムを呼
び返したりしてるんでしょうか?

気になるのは、BMessageのポインタを複数回Data_Wrap_Structして
いるように見えますが、これだとGCの度に「生きているポインタ」
をdeleteすることになります。必要に応じてコピーを作るか、同じ
Rubyオブジェクトを使い回す必要があります。

|・まず、私が不安なのは、私はこのソースを.cppファイルにして
|g++でコンパイルしているのですが、CとC++をちゃんぽんにすると
|まずいですか?

C++だとリンケージの関係でInit_xxxが呼べないという事態が発生
することがありますが、今回は発生してないんですね。省略された
部分に extern "C" があるんでしょうね。

|・このソースは、Windowに貼り付けるViewという部品のものでして、
|BeOSではBViewというクラスが用意されています。その下に
|MyViewというクラスを定義して、そのオブジェクトを

(後略)^^;;;

それそのものには問題は無いと思います。一番怪しいのはBMessage
をdeleteしちゃった関係でメモリを壊している点ですが、それだと
もうちょっと現象がゆらぎがあるような気がします。別の原因かな
あ。
                                まつもと ゆきひろ /:|)