染谷と申します。

FelicaLibを使用するプログラムの実行で
以下のメッセージが出力されました。

== ここから =============================================
C:\TEMP>felica_dump.rb
C:\TEMP/felicalib.rb:54: [BUG] Segmentation fault
ruby 1.8.7 (2010-08-16 patchlevel 302) [i386-mswin32]


This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
== ここまで =============================================

実行環境は、以下の通りです。
 OS:WindowsXP
 Ruby:Ruby-1.8.7(p302)

felicalib.rbの内容ですが、以下の通りです。

== ここから =============================================
require 'Win32API'

module FelicaLib
    dllname = 'felicalib.dll'

    $pasori_open = Win32API.new(dllname, 'pasori_open', 'P', 'P')
    $pasori_close = Win32API.new(dllname, 'pasori_close', 'P', 'V')
    $pasori_init = Win32API.new(dllname, 'pasori_init', 'P', 'I')
    $felica_polling = Win32API.new(dllname, 'felica_polling', %w(P I I I), 'P'
)
    $felica_free = Win32API.new(dllname, 'felica_free', 'P', 'V')
    $felica_getidm = Win32API.new(dllname, 'felica_getidm', %w(P P), 'V')
    $felica_getpmm = Win32API.new(dllname, 'felica_getpmm', %w(P P), 'V')
    $felica_read_without_encryption02 = Win32API.new(dllname, 'felica_read_wit
hout_encryption02', %w(P I I I P), 'I')
    $felica_enum_systemcode = Win32API.new(dllname, 'felica_enum_systemcode', 
'P', 'P')
    $felica_enum_service = Win32API.new(dllname, 'felica_enum_service', %w(P I
), 'P')

    POLLING_ANY           = 0xffff
    POLLING_EDY           = 0xfe00
    POLLING_SUICA         = 0x0003
    SERVICE_EDY           = 0x170f
    SERVICE_SUICA_INOUT   = 0x108f
    SERVICE_SUICA_HISTORY = 0x090f
    #SERVICE_SUICA        = 0x090f
    
    def pasori_open(str = nil)
        $pasori_open.call(str)
    end

    def pasori_close(pasori)
        $pasori_close.call(pasori)
    end

    def pasori_init(pasori)
        $pasori_init.call(pasori)
    end

    def felica_polling(pasori, systemcode, rfu, timeslot)
        $felica_polling.call(pasori, systemcode, rfu, timeslot)
    end
 
    def felica_free(felica)
        $felica_free.call(felica)
    end

    def felica_getidm(felica, buf)
        $felica_getidm.call(felica, buf)
    end

    def felica_getpmm(felica, buf)
        $felica_getpmm.call(felica, buf)
    end

    def felica_read_without_encryption02(felica, servicecode, mode, addr, buf)
        $felica_read_without_encryption02.call(felica, servicecode, mode, addr
, buf)
    end

    def felica_enum_systemcode(pasori)
        $felica_enum_systemcode.call(pasori)
    end

    def felica_enum_service(pasori, systemcode)
        $felica_enum_service.call(pasori, systemcode)
    end

module_function :pasori_open, :pasori_close, :pasori_init, :felica_polling, :f
elica_free
    module_function :felica_getidm, :felica_getpmm, :felica_read_without_encry
ption02
    module_function :felica_enum_systemcode, :felica_enum_service
end

module FelicaLib
  class << self
    def felica_raw_values(systemcode, servicecode, little_endian = false)
        values = []
        b = Array.new(4)
        psr = pasori_open ""
        pasori_init(psr)
        flc = felica_polling(psr, systemcode, 0, 0)
        i = 0
        while felica_read_without_encryption02(flc, servicecode, 0, i, b) == 0
            row = b.to_a('I')
            data = ""
            row.size.times do |j|
                if little_endian
                    4.times { |k| data += sprintf("%02x", (row[j].to_i >> (8 *
 k)) & 0xff) }
                else
                    data += sprintf("%08x", row[j].to_i & 0xffffffff)
                end
            end
            yield data if block_given?
            values << data
            i += 1
        end
        pasori_close(psr)
        values
    end
  end
end
   ※コメント行削除してあります。
== ここまで =============================================

このfelicalib.rbの54行目は、

    def pasori_init(pasori)
        $pasori_init.call(pasori)  <=この行です。
    end

です。

私のコーディングに誤りがあるのでしょうか?

初めて出たメッセージですので、対処方法が
わかりません。

恐れ入りますが、何方かご教授ください。

宜しくお願いします。