From: nobu.nakada@... Date: 2002-06-23T17:16:53+09:00 Subject: [ruby-list:35435] Re: win32ole で excel が終了しない なかだです。 At Sun, 23 Jun 2002 16:38:20 +0900, arton wrote: > > > > ひょっとして今1.7でWIN32OLD.allocate.eachとかするとSEGVしますか? > > > ちょっとallocateっていうのは良くわからない(のは、Ruby1.6系+ > > > Win32OLE0.4.8で僕の環境は止まっているから)ですが、 > > > > allocateだけしてinitializeしないと、たぶんpDispatchがNULLのまん > > まなのではないかと。 > これは、Objectのメソッドではなくて、拡張ライブラリでメモリー確保してその > 直後になんかを呼ぶという意味なんでしょうか? だと、WIN32OLE.newでは必ず > IDispatchの取得が行われます(できなければ例外)から、NULL初期化というこ > とは無いです。 1.7だと、Foo.new(==Class#new)は(Foo.allocate==Class#allocate)で 作られたインスタンスに対してinitalizeする、という形になってます。 もちろん通常は直接呼ぶものではないんですが、Rubyレベルでもわざ と未初期化状態のインスタンスを作ることはできます。1.7に入ってる win32ole.cをざっと見たところでは、allocateを提供してるようです。 At Sun, 23 Jun 2002 16:51:57 +0900, arton wrote: > > > プロクシが生きてると、IDispatchが非同期に破棄されるということで > > > すか? > IDipspatchの廃棄(サーバそのものの)は同期的ですが、プロクシ(クライアン > トのプロセス側)が廃棄されたIDispatchをしばらく(ここは微妙だけど、「し > ばらく」という表現が正しいとしか思えない動作を見かけることがあるので勘弁) > はクライアント側に保持されていて、呼び出しに対してエラーを返します。 なるほど。非同期と呼べるかは微妙な感じですが、即座に破棄される わけではないんですね。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦