From: shingo umeshima Date: 2007-02-27T19:19:06+09:00 Subject: [ruby-list:43227] Re: Exerb 4.1.0とswin060205でアプリケーションエラー ------=_Part_6783_11134144.1172571542271 Content-Type: text/plain; charset=ISO-2022-JP; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline 梅島です。 VC7.1を手に入れて試してみたのですが、やはりうまく動作しないようです。 生成したexeファイルをデバッガを介して動作させてみたのですが、 swin.soをロードした後、Init_swin()でrb_define_module()を呼んだときに SEGVとなっていることが分かりました。 [呼び出し履歴] msvcr71-ruby18.dll!rb_define_module(const char * name=0x10015744) 行 301 C exe33F.tmp!Init_swin() 行 901 + 0xa C test.exe!exerb_call_initialize_function(HINSTANCE__ * const handle=0x10000000, const char * filepath=0x004f356e) 行 599 + 0x8 C++ test.exe!exerb_load_extension_library(const FILE_ENTRY_HEADER * file_entry=0x004f3758) 行 391 + 0xd C++ ここで、msvcr71-ruby18.dllがロードされている?ようなのですが、 これはおかしいですよね。 http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/exerb/exerb/doc/inside.ja.rd?rev=1.16&view=markup ここのドキュメントでは >そこでインポートテーブルを書き換え、Ruby DLLをリンクしている部分を自分自身の >実行ファイルにリンクするように変更します。 >コアはRuby DLLと同じ関数をエクスポートしているので、ダイナミックリンクが成功 >します。 となっているので、インポートテーブルの書き換えがうまくできていない? と思われるのですが、今のところその原因が分かりません。 exerbで拡張ライブラリを扱う場合、対象となるライブラリがVC6でコンパイルされて いる必要があるのでしょうか。 # exerb-4.1.0に同梱されているswin.soだとエラーにならずに動作します。 -- UMESHIMA Shingo ------=_Part_6783_11134144.1172571542271 Content-Type: text/html; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit Content-Disposition: inline 梅島です。

VC7.1を手に入れて試してみたのですが、やはりうまく動作しないようです。
生成したexeファイルをデバッガを介して動作させてみたのですが、
swin.soをロードした後、Init_swin()でrb_define_module()を呼んだときに
SEGVとなっていることが分かりました。

[呼び出し履歴]
msvcr71-ruby18.dll!rb_define_module(const char * name=0x10015744)  行 301    C
exe33F.tmp!Init_swin()  行 901 + 0xa    C
test.exe!exerb_call_initialize_function(HINSTANCE__ * const handle=0x10000000, const char * filepath=0x004f356e)  行 599 + 0x8    C++
test.exe!exerb_load_extension_library (const FILE_ENTRY_HEADER * file_entry=0x004f3758)  行 391 + 0xd    C++

ここで、msvcr71-ruby18.dllがロードされている?ようなのですが、
これはおかしいですよね。

http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/exerb/exerb/doc/inside.ja.rd?rev=1.16&view=markup
ここのドキュメントでは
>そこでインポートテーブルを書き換え、Ruby DLLをリンクしている部分を自分自身の
>実行ファイルにリンクするように変更します。
>コアはRuby DLLと同じ関数をエクスポートしているので、ダイナミックリンクが成功
>します。
となっているので、インポートテーブルの書き換えがうまくできていない?
と思われるのですが、今のところその原因が分かりません。

exerbで拡張ライブラリを扱う場合、対象となるライブラリがVC6でコンパイルされて
いる必要があるのでしょうか。

# exerb-4.1.0に同梱されているswin.soだとエラーにならずに動作します。

--
UMESHIMA Shingo
------=_Part_6783_11134144.1172571542271--