小田@QNES です。

ご参考まで。

標準の拡張モジュールのDLL化は、断念しました(^^;;

---
On Wed, 30 Sep 1998 12:38:41 +0900
matz / netlab.co.jp (Yukihiro Matsumoto) wrote:

> まつもと ゆきひろです
> 
> ほとんどわたなべさんへの公開質問なんですが.
> Win32プラットフォーム(Cygwinを想定してます)で拡張モジュール
> を作る手順はUNIX上で行うのとどのように異なりますでしょうか.
> また,気をつけるべき点はありますでしょうか.

MS-VC++5.0 を使って、拡張モジュールを作る場合。

1.通常通り、ruby をmakeします。
2.ruby.exe と rubymw.dll が出来ますが、このとき同時に
  rubymw.lib が出来ます。
3.拡張モジュールを、DLL で作成し、上記rubymw.libをlinkします。

という手順で作ると、拡張モジュール(自作)がDLLで作成できます。
ただし、1つ問題がありまして、
拡張モジュール中で、クラス定義を
    cHOGE = rb_define_class("HOGEHOGE", cObject);
とすると。

class.c:99行目
    RBASIC(klass)->klass = singleton_class_new(RBASIC(super)->klass);

で、access vioration例外します。

    cHOGE = rb_define_class("HOGEHOGE", 0);
とするとうまくいきますので、cObject のexportが変になっているのかなぁ
と思っているのですが、詳しく調査はしていません。

∪*****/\*****\/*****/\*****∪
  Koji Oda  NEC Software Kyusyu
  1st Development Department
   Based Software Division
  E-Mail:oda / bsd1.qnes.nec.co.jp
∩*****/\*****\/*****/\*****∩