Ruby

2008年6月26日 (木)

標準エラー出力不使用版 ruby-mswince を作ってみた。

先日頂いた moyashi さんコメント「エラーメッセージを読み取るのが困難で結局使ってませんが」を受けて、標準エラー出力の代わりに標準出力にエラーメッセージを出力するように修正した ruby-mswince を作ってみました。

修正版の ruby-mswince を使用すると以下のように標準出力にエラーメッセージが出力されますので動体視力が悪い人でも安心してご使用できますcatface

Scrn0027

| | コメント (1) | トラックバック (1)

2008年6月24日 (火)

CeGCC の dup 関数は Socket ハンドルの複製には対応してなさげ…

ソースをほげっても dup 関数の実装がどこにあるかわからなかったので、cegcc.dll を LoadLibrary して dup 関数のアドレスを GetProcAddress で取得して無理やり呼び出してみました。

結果は 0 を返すものの後続の connect 処理で失敗してしまい Socket ハンドルの複製は出来なさそうでした…orz

ではどうやって Socket からの入力ストリームを実行しているスクリプトに受け渡しているんだろう…とソースをほげっていると CeGCC に含まれる PipeLib が怪しいのに気付きました。

Windows Mobile はパイプに対応していないのですが、上記の PipeLib には CreatePipe 関数が定義されています。おそらくパイプを使って Socket からの入力ストリームを実行しているスクリプトの標準入力に受け渡しているんじゃないかなーと(推測

誰か PipeLibruby-mswince に取り込んでくれないかな~(他力本願

| | コメント (0) | トラックバック (0)

2008年6月23日 (月)

CeGCC の dup 関数の実装はどこ?

CeGCCdup 関数がどうやって Sokcet ハンドルを複製しているのか調査しているんですが、行き詰ってしまいました…orz

とりあえず SVN リポジトリから trunk を丸ごとチェックアウトして dup.cdup2.c は単に fcntl 関数のラッパーということはわかったんですが、fcntl 関数の実装って fcntl.s でいいんだろうか?

ソースをみても単にシステムコールを呼び出しているだけみたいだし…。

Socket ハンドルを複製する API は提供はされてないけどもシステムコールは存在しているとうこと?

それとも見当違いのソースをみている?

教えて!エロイ人~!bearing

| | コメント (0) | トラックバック (0)

2008年6月21日 (土)

Socket 対応版 ruby-mswince キテター!

Socket に対応した ruby-mswince がリリースされていました!happy02

Target-EarthdotNet - Ruby on Windows CE & Pocket PC via ひとりぶろぐ

早速アドエスの microSD カードにインストールしてみましたが動きませんでした orz

CeGCC の制限によりマルチバイト文字を含むパス上にインストールすると動かないようです。

それにしても CeGCCdup 関数がどうやって Sokcet ハンドルを複製しているのか気になるのでソースをほげってみたいと思います。

| | コメント (5) | トラックバック (0)

2008年1月28日 (月)

ruby-mswince を Socket に対応できないか?

現在リリースされている ruby-mswince は Socket に対応していないため残念ながら open-uri が使用できません。

理由は作者様のブログにもあるように Windows Mobilde の DuplicateHandle 関数が Socket ハンドルをサポートしていないためです。

通常 Windows で Socket ハンドルを複製する場合は DuplicateHandle 関数、または WSADuplicateSocket 関数を使用します。

Windows Mobile 用の winsock2.h には WSADuplicateSocket 関数の定義はあるものの ws2.dll に関数が存在しないため使用できません(GetProcAddress 関数を使用してもダメ)。

もうお手上げ状態だな~と思いながらも調査を続けていたところ、WSPDuplicateSocket 関数なるものを発見!

これはいけるかも!と思いつつ ws2api.h をインクルードして ws2.dll から GetProcAddress 関数で取得を試みるも失敗... orz

ただし、確認にはエミュレータ「Windows Mobile 6 Classic」を使用したので実機では使用できるものが存在するかもしれません。

ruby-mswince が Socket に対応できる日は来るでしょうか…。

| | コメント (0) | トラックバック (0)

その他のカテゴリー

CeGCC | Delphi | DirectShow | iPhone | Java | JMF | Mac | Mysaifu JVM | NetBeans | onig4j | Ruby | SQLite | W-ZERO3 | Windows Mobile | ワンセグ | 開発