Felicaでちょっと遊んでいるのですが、とあるカードには、とあるサービスコードのとあるブロック番号に
とある文字列が書き込まれていて、それを読みだすといろいろ便利なことが出来そうです。
ということで、ここのページで公開されている「CFelicaLib.vb」に機能を追加しました。
'=============================================
'【関 数 名】read_string
'【第1引数】[in] Integer サービスコード
'【第2引数】[in] Byte ブロック番号
'【戻 り 値】[out] String 文字列
'---------------------------------------------
' 既知のサービスコードとブロック番号から文字列を読み取る
'=============================================
Public Function read_string(ByVal serviceCode As Integer, ByVal address As Byte) As String
Try
'------------
' エラー処理
'------------
If f_ptr = IntPtr.Zero Then
Return ""
End If
'----------
' 変数定義
'----------
Dim rStr As String
Dim buf(15) As UInt8
'-------------------------
' 変数bufのアドレスを取得
'-------------------------
Dim gch As GCHandle = GCHandle.Alloc(buf, GCHandleType.Pinned)
Dim b As IntPtr = gch.AddrOfPinnedObject().ToInt32
'-------------
' 指定したサービス、アドレスから読み取り
'-------------
felica_read_without_encryption02(f_ptr, serviceCode, 0, address, b)
rStr = System.Text.Encoding.ASCII.GetString(buf) 'HexToAsc(buf)
'--------------
' メモリの解放
'--------------
gch.Free()
'------------
' 結果を返す
'------------
Return rStr
Catch ex As Exception
MessageBox.Show(ex.Message, "read_str()")
Return ""
End Try
End Function
作者の白執事様に感謝します。

