以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助] 读卡器调用  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=49602)

--  作者:zhangyan123_123
--  发布时间:2014/4/21 11:08:00
--  [求助] 读卡器调用

我想作个会议签到程序,我公司有职工卡,我有职工物理卡号与员工信息对应表,如何在foxtable 下调用,请位高手指导一下:

dll 文件名 eLabel.all

在 .net 下是这样定义并调用的

 

 [DllImport( "eLabel.DLL" )]

 private static extern int InitReader();//初始化读卡器

 [DllImport( "eLabel.DLL" )]

 private static extern int UnlinkReader();//断开读卡器

 [DllImport( "eLabel.DLL" )]

 private static extern int GetMOCardSn( StringBuilder sn, StringBuilder err );  //读工作证序列号

 

在foxtable 全局代码中写:

<DllImport("eLabel.DLL")>  Public Function  InitReader() As Integer
End Function

<DllImport("eLabel.DLL")> Public  Function UnlinkReader() As Integer
End Function

<DllImport("eLabel.DLL")> Public Function GetMOCardSn(ByVal sn As String,ByVal err As String) As Integer
End Function

---------------------

新建一个读卡form.form 下有三个button

--------------

button1,读卡器链接,click事件代码 :

Dim n As Integer = InitReader()
If n=0 Then
   Messagebox.Show("链接成功")
Else
    Messagebox.Show("链接失败")
End If

------------

button3,关闭form(同时断开读卡器), click事件代码 :
Dim c As Integer = UnlinkReader()
Forms("w_read").close()

---------

经测试,button1,button3 运行正常


在button2,读卡,报错,button2  click事件代码 :

Dim sn As String
Dim err As String
Dim c As Integer = GetMOCardSn( sn , err )
 Messagebox.Show("22")

 

执行button1后,执行button2(执行读卡器链接后,执行读卡)

提示:     错误代码位置:窗口,w_read,Button2,Click

            System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
            在 UserCode.GetM0CardSn(String sn, String err)
            在 UserCode.Click_2dcb6b29(ControlEventArgs e)

 

那位专家指指招,谢谢,我邮箱 zhangyan@bjbpp.com


 


--  作者:Bin
--  发布时间:2014/4/21 11:08:00
--  
狐表安装在了系统目录吧? 导致访问DLL失败.
--  作者:有点甜
--  发布时间:2014/4/21 11:51:00
--  

试试这样去定义,看行不行

 

<DllImport("eLabel.DLL")> Public Function GetMOCardSn(ByVal sn As StringBuilder, ByVal err As StringBuilder) As Integer
End Function


--  作者:zhangyan123_123
--  发布时间:2014/4/21 12:24:00
--  

安装了,否则不可能读卡器链接成功


--  作者:zhangyan123_123
--  发布时间:2014/4/21 12:28:00
--  

刚测试了,报同样错误


--  作者:有点甜
--  发布时间:2014/4/21 14:42:00
--  
以下是引用zhangyan123_123在2014-4-21 12:28:00的发言:

刚测试了,报同样错误

 

感觉不应该错才对。你再改改,应该是可以的。

 

<DllImport("eLabel.DLL")> Public Function GetMOCardSn(ByRef sn As StringBuilder, ByRef err As StringBuilder) As Integer
End Function

 

调用

Dim sn As new Stringbuilder
Dim err As new Stringbuilder
Dim c As Integer = GetMOCardSn(sn , err)
msgbox(c & " " & sn)


--  作者:zhangyan123_123
--  发布时间:2014/4/21 15:53:00
--  

原来提示:     错误代码位置:窗口,w_read,Button2,Click

            System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
            在 UserCode.GetM0CardSn(String& sn, String& err)
            在 UserCode.Click_2dcb6b29(ControlEventArgs e)

 

改为 stringBuilder后,错误提示

 

           System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
            在 UserCode.GetM0CardSn(StringBuilder& sn, StringBuilder& err)
            在 UserCode.Click_2dcb6b29(ControlEventArgs e)

 

试着放卡卡与不放卡,错误提示一样,此程序,我公司在.net测试成功,我在pb下也测试成功了,不知在此为何抱错,

可能是那没配置好


--  作者:zhangyan123_123
--  发布时间:2014/4/21 16:02:00
--  

你那有读卡器吗?不行我发给你们eLabel.dll,你们测试一下,eLabel.dll默认端口是com1,我已在系统配置,把端口

改为com1


--  作者:有点甜
--  发布时间:2014/4/21 16:13:00
--  
以下是引用zhangyan123_123在2014-4-21 16:02:00的发言:

你那有读卡器吗?不行我发给你们eLabel.dll,你们测试一下,eLabel.dll默认端口是com1,我已在系统配置,把端口

改为com1

 

没有读卡器,远程帮你看一下,应该是挺简单的问题

 

QQ 2450314695

 


--  作者:zhangyan123_123
--  发布时间:2014/4/21 16:25:00
--  
我公司是保密单位,单位内网和外网是物理隔离的,如有机会北京,欢迎来我公司参观,