使用VB.NET进行RFID编程|第三部分

时间:2011-12-06 08:55:51

标签: vb.net visual-studio-2010 rfid

现在,我对该类以及如何安装COMRD800.dll驱动程序(使用命令提示符:regsvr32)有所了解。

我使用Visual Studio 2010作为我的文本编辑器,使用VB.NET作为我的编程语言。

但我在这里,另一个问题是再次追逐我。我不知道我的错在哪里。

首先,我想解释一下,在使用此RF ID时,在从RF ID标签写入和读取十六进制密钥之前,需要调用一些函数。 以下是我在写作或阅读之前必须使用的功能。

dc_init(100,115200) 'to open the port, this should be initialized first
dc_beep(icdev,10) 'just to make the device beeping
dc_load_key_hex(icdev,0,0,"ffffffffffff") 'initializing the device key
dc_request(icdev,0,tagtype) 'to get the Card Tag Type
dc_anticoll(icdev,0,snr) 'to get the card's serial number
dc_select(icdev,snr,sizeA) 'to get the size of the card's memory to pc (it always "8")
dc_authentication(icdev,0,0) 'to pass the authentication
dc_write_hex(icdev,1,TestStr) 'writing to the RF ID tag with string TestStr
dc_read_hex(icdev,1,TestStr2) 'Nah, here is where the error occured. 

TestStr2是一个refference变量,换句话说,hex的值将存储在那里。 (我应打印TestStr2以从RF ID标签获取十六进制值)

当函数返回“0”时,表示“正确”或正常工作。 但是当函数返回<> 0意味着“出了问题”。

到目前为止,他们都返回“0”。 (除了存在错误的dc_read_hex之外)。

解释: 这些功能来自驱动程序(dcrf32.dll文件)。要在我的项目中使用它们,我必须在我的VB.NET模块文件中声明它们。 (在我的项目中,它是“KoneksiRFID.vb”文件)。

到目前为止我对这些函数没有任何问题,但是当我进入“读取”部分(dc_read_hex函数)时,我有一个错误。 它说“FatalExecutionEngineError”。

Images

如您所见,当我读取值时出现问题。 如果您想参与我的问题并找到解决问题的方法,这是我的项目。 谢谢之前,对于试图解决这个问题的人。我非常欣赏它。

My Entire Project(包括其驱动程序和RFID手册.pdf)

哦,还有一件事,你必须将“驱动程序(dcrf32.dll,dcrf32.lib,dcrf32.h)文件”放到你的bin或windows / system32< - 我不知道这是否需要或不。但是,只要在vb.net模块无法正常工作时尝试它。

1 个答案:

答案 0 :(得分:1)

您的VB6定义是这样的:

Declare Function dc_read_hex Lib "dcrf32.dll" (ByVal icdev As Long, ByVal adr%, ByVal sdata$) As Integer

您目前的定义是这样的,您没有调整adr的数据类型或返回值:

Declare Function dc_read_hex Lib "dcrf32.dll" (ByVal icdev As Integer, ByVal adr%, ByRef sdata$) As Integer

尝试将其定义为:

Declare Function dc_read_hex Lib "dcrf32.dll" (ByVal icdev As Integer, ByVal adr as Short, ByRef sdata as String) As Short

编辑:

试试这个MSDN页面,您可能需要添加Imports System.RunTime.InteropServices

Declare Function dc_read_hex Lib "dcrf32.dll" (ByVal icdev As Integer, ByVal adr as Short, <MarshalAs(UnmanagedType.LPTStr)> sdata as String) As Short