よしだです

ARIMA Yasuhiro <fit0298 / fitec.co.jp> writes:
> WATANABE Hirofumi <Hirofumi.Watanabe / jp.sony.com> wrote
> | 基本的な違いは NUM2INT を NUM2ULONG に変更しただけなんだけど,
> | 0x80000000 以上だとあやしいのかなあ?
> | 実際のアドレスがそのあたりなのかも.
> 
> Win95 のメモリの制約を調べたところ、アプリケーションで普通に利用できる
> アドレスは 4MB〜2GB の範囲とのことです。
> 2GB〜3GB は共有マップファイルで使用するとの記述がありました。
> # 1996/2/1発行「Microsoft Windows 95 プログラマーズガイド」より

0x80000000 以上のとき INT2NUM すると負の Bignum になってしま
うので,NUM2ULONG では元に戻らないような気がします。

とりあえず以下の部分を NUM2INT に戻すと動くと思うのですが,
これが正しいのかどうかはわかりません。

--- Win32API.c.org	Fri Oct 15 16:41:38 1999
+++ Win32API.c	Sun Dec 12 21:56:14 1999
@@ -140,7 +140,7 @@
 
     obj_proc = rb_iv_get(obj, "__proc__");
 
-    ApiFunction = (FARPROC)NUM2ULONG(obj_proc);
+    ApiFunction = (FARPROC)NUM2INT(obj_proc);
 
     obj_import = rb_iv_get(obj, "__import__");
     obj_export = rb_iv_get(obj, "__export__");


-- 
    吉田正人  INS エンジニアリング(株)
              事業開拓室
    yoshidam / inse.co.jp
    yoshidam / yoshidam.net