- PR -

Felicaについて

1
投稿者投稿内容
未熟者
常連さん
会議室デビュー日: 2006/08/12
投稿数: 20
投稿日時: 2006-10-13 10:06
現在Felicaを利用したVB.NETのプログラムを作成しようとしているのですが、下記のコードはカードのIdmを取得してテキストボックスに表示するだけのものなのですが実行した結果イニシャライズとポートのオープンまでは成功しているようなのですがポーリングとカードの取得ができていません、VB6.0のサンプルでは動作しているので本体やカードには異常はないと思われます、どなたかFelicaに詳しいかたご教授お願いします。

Public Function VarPtr(ByVal obj As Object) As Integer
Dim gch As GCHandle = GCHandle.Alloc(obj, GCHandleType.Pinned)
Dim address As Integer = gch.AddrOfPinnedObject().ToInt32()

gch.Free()
VarPtr = address
End Function

Private Sub Command1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Command1.Click
'ライブラリの初期化
If (InitializeLibrary() = 0) Then
MsgBox("Can't initialize library.")
Exit Sub
End If

'リーダ・ライタのオープン
If (OpenReaderWriterAuto() = 0) Then
MsgBox("Can't open reader writer.")
Exit Sub
End If

Dim udtPolling As StructurePolling
Dim bytSystemCode(1) As Byte
bytSystemCode(0) = &HFF
bytSystemCode(1) = &HFF
udtPolling.lngSystemCode = VarPtr(bytSystemCode(0))
udtPolling.bytTimeSlot = &H0

Dim bytNumberOfCard As Byte

Dim udtCardInformation As StructureCardInformation
Dim bytCardIdm(7) As Byte
Dim bytCardPmm(7) As Byte
udtCardInformation.lngCardIdm = VarPtr(bytCardIdm(0))
udtCardInformation.lngCardPmm = VarPtr(bytCardPmm(0))

Dim j As Short
Dim temp As Integer

Set_time_out(1000)

For j = 0 To 10
'ポーリング
temp = PollingAndGetCardInformation(udtPolling, bytNumberOfCard, udtCardInformation)

If Not (temp = 0) Then
'MsgBox "find"
Exit For
ElseIf j = 10 Then
MsgBox("not find")
j = CloseReaderWriter()
j = DisposeLibrary()
Exit Sub
End If
Next

Dim IDm As String
Dim i As Short

'カードのIDを文字列化
For i = 0 To 7
IDm = IDm & Hex(bytCardIdm(i))
Next

Text2.Text = IDm
End Sub
NAO
ぬし
会議室デビュー日: 2001/10/24
投稿数: 1256
お住まい・勤務地: 神奈川のはずれから東京の下町
投稿日時: 2006-10-13 10:32
引用:

実行した結果イニシャライズとポートのオープンまでは成功しているようなのですがポーリングとカードの取得ができていません


とは何を持ってして判断してます?
ステップ実行してポーリングの所を通って居ないんですか?

ステップ実行してみて下さい。

またVB6のサンプルがあるのであれば
それとコードレベルで比較してみてはどうでしょうか? 
未熟者
常連さん
会議室デビュー日: 2006/08/12
投稿数: 20
投稿日時: 2006-10-13 11:05
NAOさん返答ありがとうございます、ステップ実行は全部確認しております、結果としてはVB6.0の場合はPollingAndGetCardInformationを行った後にbytNumberOfCardに値が格納されていますが.NETの場合にはPollingAndGetCardInformationの引数であるudtPollingとudtCardInformationの値は両方格納されています(VB6.0と同一)が値は0し帰ってきません。よってポーリングの部分がうまく動作していないと判断しています。
NAO
ぬし
会議室デビュー日: 2001/10/24
投稿数: 1256
お住まい・勤務地: 神奈川のはずれから東京の下町
投稿日時: 2006-10-13 11:51
引用:

未熟者さんの書き込み (2006-10-13 11:05) より:
NAOさん返答ありがとうございます、ステップ実行は全部確認しております、結果としてはVB6.0の場合はPollingAndGetCardInformationを行った後にbytNumberOfCardに値が格納されていますが.NETの場合にはPollingAndGetCardInformationの引数であるudtPollingとudtCardInformationの値は両方格納されています(VB6.0と同一)が値は0し帰ってきません。よってポーリングの部分がうまく動作していないと判断しています。


書き方からすると

bytNumberOfCardの値がVB6だと入るのにvb.netだと入らない
それ以外は同一の値が入ってるって事ですかね?

私も開発している訳では無いのですが…
APIリファレンスを読むか、
ソニーさんに聞いた方が早いと思います。

#検索しても解決したってのが出てきませんね。
_________________
Inspired Ambitious
ISMS Assistant Auditor

[ メッセージ編集済み 編集者: NAO 編集日時 2006-10-13 11:59 ]
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2006-10-13 18:10
引用:

gch.Free()


ポインタをAPIに渡す前に開放している。
未熟者
常連さん
会議室デビュー日: 2006/08/12
投稿数: 20
投稿日時: 2006-10-13 19:41
todoさん返答ありがとうございます、現在Felicaが手元にありませんので試せませんが土日あけましたら試してみます。
未熟者
常連さん
会議室デビュー日: 2006/08/12
投稿数: 20
投稿日時: 2006-10-16 09:31
本日試してみましたが残念ながら結果は効果ありませんでした。
1

スキルアップ/キャリアアップ(JOB@IT)