From: arton Date: 2003-10-20T23:53:22+09:00 Subject: [ruby-list:38619] dl and win32 API call artonです。 win32に特化した問題ですが、ruby-win32が止まっているようなのでこちらに振 ります。 主題:ruby-1.8.0添付のdlを利用してWIN32 APIを呼び出すとスタックポインタ がずれる。元の話題はhttp://www.tietew.jp/beckrb/msg00113.html です。 詳細:WIN32 APIでは、引数のスタックからのポップを呼ばれた側が実行する。 しかし、dlは関数呼出し後に引数をスタックからポップする。そのため、引数の 分だけ余分にスタックポインタがポップされてしまう。 ただし、現状では問題が出ていないようです。MSVC版での動作の検証結果は http://arton.no-ip.info/collabo/backyard/?StdDeclCDecl に記述してあります。 しかし、WIN32版Rubyには、MSVC6版以外にMingw, bcc, cygwin, MSVC7などあっ て、これらの場合についてまではわかりません。いずれにしろ、不正な動作なこ とには変わらないため、現状が望ましいとも思えません。ちょっと検討した結果 は、 http://arton.no-ip.info/collabo/backyard/?DlPatch にあります。が、ここで挙げているパッチ自体いささか中途半端だということと、 他のコンパイラではどうなのか、といった点が抜けています。 よろしければ、各コンパイラでの現状はどうなのか、どうすることが望ましいか、 について検討しませんか?  なお、僕は、 1. WIN32APIについては従来通りwin32api.so、C関数についてはdl を使い分ける 2. dlがすべて(自動で)面倒見る 3. dlにWIN32API用とC関数用の2種類のクラスを持つ(他のプラットフォームで は無意味) の選択であれば、2.が望ましいと考えますが、3.はともかく、1.というオプショ ンもあるので、これも検討の余地があると思います。 また、上記のように、MSVC6版については現状でほぼ問題ないので、そのまま置 いておくという選択肢もあるようにも思えます。 それでは。 -- arton __________________________________________________ Do You Yahoo!? Yahoo! BB is Broadband by Yahoo! http://bb.yahoo.co.jp/