2010年12月12日

[ruby-list:47691] Re: プログラム実行時に「[BUG] Segmentation fault」

再び、染谷です。

今度は、DLで組んでみましたが、またセグメンテーション・
フォルトが発生しました。

DLで組んだPGは、以下の通りです。

=== ここから =====================================================

require 'dl'
require 'dl/import'

module FelicaLib
extend DL::Importable
dlload 'felicalib.dll'

typealias 'uint8', 'unsigned char'
typealias 'uint16', 'unsigned int'
#typealias 'uint16', 'unsigned short int'

extern "pasori* pasori_open(char*)"
extern "void pasori_close(pasori*)"
extern "int pasori_init(pasori *)"

extern "felica *felica_polling(pasori *, uint16, uint8, uint8)"

extern "void felica_free(felica *)"

extern "void felica_getidm(felica *, uint8 *)"
extern "void felica_getpmm(felica *, uint8 *)"

extern "int felica_read_without_encryption02(felica *, int, int, uint8, ui
nt8 *)"
extern "felica * felica_enum_systemcode(pasori *)"
extern "felica * felica_enum_service(pasori *, uint16)"

POLLING_ANY = 0xffff
POLLING_EDY = 0xfe00 #-- システムコード: 共通領域 (Edy などが使
用)
POLLING_SUICA = 0x0003 #-- システムコード: サイバネ領域

SERVICE_EDY = 0x170f
SERVICE_SUICA_INOUT = 0x108f
SERVICE_SUICA_HISTORY = 0x090f

end

module FelicaLib
class << self
def felica_raw_values(systemcode, servicecode, little_endian = false)
values = []
buf = 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, buf
) == 0
row = buf.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
=== ここまで =====================================================

実行PGは、前メールと同じなので省略します。

実行したところ、前と同じメッセージが出てしまいました。

どこまで実行されたか確認するため、デバッグモードで
実行してみました。

出力結果は以下の通りです。

=== ここから =====================================================
C:\TEMP>ruby -d felica_dump.rb
"[DL] call pasori_open with [\"\"]"
"[DL] retval=#<DL::PtrData:0x28c3f00 ptr=0x2a429d0 size=0 free=0x0> args=[\"\"
]"

"[DL] call pasori_init with [#<DL::PtrData:0x28c3f00 ptr=0x2a429d0 size=0 free
=0
x0>]"
"[DL] retval=0 args=[#<DL::PtrData:0x28c3f00 ptr=0x2a429d0 size=0 free=0x0>]"
"[DL] call felica_polling with [#<DL::PtrData:0x28c3f00 ptr=0x2a429d0 size=0 f
re
e=0x0>, 3, 0, 0]"
"[DL] retval=nil args=[#<DL::PtrData:0x28c3f00 ptr=0x2a429d0 size=0 free=0x0>,
3
, 0, 0]"
"[DL] call felica_read_without_encryption02 with [nil, 2319, 0, 0, [nil, nil,
ni
l, nil]]"
(eval):5: [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.
=== ここまで =====================================================

felicalib.dllがいけないでしょうか?

組み方がいけないのでしょうか?

何方か、ご教授お願いします。

以上

----- Original Message -----
>Date: Fri, 10 Dec 2010 12:34:02 +0900
>From: 染谷 康一 <kouichi_someya@xxxxx>
>Subject: [ruby-list:47683] Re: プログラム実行時に「[BUG] Segmentation
> fault」
>To: ruby-list@xxxxx (ruby mailing list)
>
>
>染谷です。
>
>なかむら(う)さん、ありがとうございます。
>
>Win32APIでポインタが使えなかったんですね。
>
>DLで組んでみます。
>
>ご教授、ありがとうございました。
>

投稿者 xml-rpc : 2010年12月12日 16:39
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/100699
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。