CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  语言基础/算法/系统设计

书到用时方恨少!一个简单的vb调用dll函数申明问题,改成delphi的,在线,解决马上给分。

楼主yesin163(破网)2006-06-04 13:02:02 在 Delphi / 语言基础/算法/系统设计 提问

函数申明部分:  
  Attribute   VB_Name   =   "HMS_57"  
  Declare   Function   PortOpen_Temic   Lib   "T5557.DLL"   (ByVal   port   As   Integer,   ByVal   baud   As   Long)   As   Long  
  Declare   Function   PortClose_Temic   Lib   "T5557.DLL"   (ByVal   icdev   As   Long)   As   Integer  
  Declare   Function   Test_Temic   Lib   "T5557.DLL"   ()   As   Integer  
  Declare   Function   Init_Temic   Lib   "T5557.DLL"   (ByVal   port   As   Integer)   As   Long  
  Declare   Function   Beep_Temic   Lib   "T5557.DLL"   (ByVal   icdev   As   Long)   As   Integer  
   
  Declare   Function   PortOpen_IC   Lib   "T5557.DLL"   (ByVal   port   As   Integer)   As   Long  
  Declare   Function   PortClose_IC   Lib   "T5557.DLL"   (ByVal   icdev   As   Long)   As   Integer  
   
  Declare   Function   Guest_Card_57   Lib   "T5557.DLL"   (ByVal   icdev   As   Long,   ByVal   RD_Add   As   Integer,   ByRef   Authorization_Code   As   Byte,   ByRef   CardID   As   Byte,   ByRef   Room1   As   Byte,   ByRef   Room2   As   Byte,   ByRef   Room3   As   Byte,   ByRef   Start_Time   As   Byte,   ByRef   End_Time   As   Byte)   As   Integer  
  Declare   Function   Guest_Card_IC   Lib   "T5557.DLL"   (ByVal   icdev   As   Long,   ByRef   Authorization_Code   As   Byte,   ByRef   CardID   As   Byte,   ByRef   Room1   As   Byte,   ByRef   Room2   As   Byte,   ByRef   Room3   As   Byte,   ByRef   Start_Time   As   Byte,   ByRef   End_Time   As   Byte)   As   Integer  
  Declare   Function   Read_Authorization_Code_57   Lib   "T5557.DLL"   (ByVal   icdev   As   Long,   ByVal   RD_Add   As   Integer,   ByRef   Authorization_Code   As   Byte)   As   Integer  
  Declare   Function   Read_Authorization_Code_IC   Lib   "T5557.DLL"   (ByVal   icdev   As   Long,   ByRef   Authorization_Code   As   Byte)   As   Integer  
  Declare   Function   CardData_57   Lib   "T5557.DLL"   (ByVal   icdev   As   Long,   ByVal   RD_Add   As   Integer,   ByRef   Authorization_Code   As   Byte,   ByRef   CardID   As   Byte,   ByRef   CardType   As   Byte)   As   Integer  
  Declare   Function   CardData_IC   Lib   "T5557.DLL"   (ByVal   icdev   As   Long,   ByRef   Authorization_Code   As   Byte,   ByRef   CardID   As   Byte,   ByRef   CardType   As   Byte)   As   Integer  
  Declare   Function   CardCode   Lib   "T5557.DLL"   (ByRef   CARD_CODE   As   Byte)   As   Integer  
  Declare   Function   Clear_Card_57   Lib   "T5557.DLL"   (ByVal   icdev   As   Long,   ByVal   RD_Add   As   Integer)   As   Integer  
  Declare   Function   Clear_Card_IC   Lib   "T5557.DLL"   (ByVal   icdev   As   Long)   As   Integer  
   
  Global   commdev   As   Long  
  Global   OK_Num   As   Long  
  Global   Not_OK_Num   As   Long  
  Global   Totel   As   Long  
   
   
   
  其中一按钮事件:  
   
  Private   Sub   Command27_Click()  
  Dim   st   As   Long  
  Dim   AUTH_CODE(8)   As   Byte  
  Dim   Start_Time(5)   As   Byte  
  Dim   End_Time(5)   As   Byte  
   
  Dim   RD_Add   As   Integer  
   
  Dim   Room1(6)   As   Byte  
  Dim   Room2(6)   As   Byte  
  Dim   Room3(6)   As   Byte  
  Dim   CARD_CODE(8)   As   Byte  
  Dim   CardID   As   Double  
  Dim   Temp1   As   Double  
  Dim   Temp2   As   Double  
   
  RD_Add   =   Val(Text9.Text)   And   &HFF  
   
  st   =   CardCode(CARD_CODE(0))  
   
  Temp1   =   CARD_CODE(0)  
  Temp2   =   &H1000000  
  CardID   =   Temp1   *   Temp2  
                                   
  Temp1   =   CARD_CODE(1)  
  Temp2   =   &H10000  
  CardID   =   CardID   +   Temp1   *   Temp2  
                                   
  Temp1   =   CARD_CODE(2)  
  Temp2   =   &H100  
  CardID   =   CardID   +   Temp1   *   Temp2  
                                   
  CardID   =   CardID   +   CARD_CODE(3)  
   
  If   Len(Text16.Text)   <   16   Then   Exit   Sub  
           
          AUTH_CODE(0)   =   Val("&H"   &   Mid(Text16.Text,   1,   2))  
          AUTH_CODE(1)   =   Val("&H"   &   Mid(Text16.Text,   3,   2))  
          AUTH_CODE(2)   =   Val("&H"   &   Mid(Text16.Text,   5,   2))  
          AUTH_CODE(3)   =   Val("&H"   &   Mid(Text16.Text,   7,   2))  
          AUTH_CODE(4)   =   Val("&H"   &   Mid(Text16.Text,   9,   2))  
          AUTH_CODE(5)   =   Val("&H"   &   Mid(Text16.Text,   11,   2))  
          AUTH_CODE(6)   =   Val("&H"   &   Mid(Text16.Text,   13,   2))  
          AUTH_CODE(7)   =   Val("&H"   &   Mid(Text16.Text,   15,   2))  
   
  Start_Time(0)   =   Right(Year(Now),   2)  
  Start_Time(1)   =   Month(Now)  
  Start_Time(2)   =   Day(Now)  
  Start_Time(3)   =   Hour(Now)  
  Start_Time(4)   =   Minute(Now)  
   
  End_Time(0)   =   Right(Year(Format(Text26.Text,   "yyyy-mm-dd   hh:mm:ss")),   2)  
  End_Time(1)   =   Month(Format(Text26.Text,   "yyyy-mm-dd   hh:mm:ss"))  
  End_Time(2)   =   Day(Format(Text26.Text,   "yyyy-mm-dd   hh:mm:ss"))  
  End_Time(3)   =   Hour(Format(Text26.Text,   "yyyy-mm-dd   hh:mm:ss"))  
  End_Time(4)   =   Minute(Format(Text26.Text,   "yyyy-mm-dd   hh:mm:ss"))  
   
  If   Text18.Text   =   ""   Then  
          MsgBox   "请输入楼栋编号(0---15)!"  
          Exit   Sub  
  End   If  
  Room1(0)   =   Val(Text18.Text)   And   &HF  
   
  If   Text19.Text   =   ""   Then  
          MsgBox   "请输入朝向编号(0---15)!"  
          Exit   Sub  
  End   If  
  Room1(1)   =   Val(Text19.Text)   And   &HF  
   
  If   Text20.Text   =   ""   Then  
          MsgBox   "请输入楼层编号(0---255)!"  
          Exit   Sub  
  End   If  
  Room1(2)   =   Val(Text20.Text)   And   &HFF  
   
  If   Text21.Text   =   ""   Then  
          MsgBox   "请输入房号(0---255)!"  
          Exit   Sub  
  End   If  
  Room1(3)   =   Val(Text21.Text)   And   &HFF  
   
  If   Text22.Text   =   ""   Then  
          MsgBox   "请输入套间编号(0---15)!"  
          Exit   Sub  
  End   If  
  Room1(4)   =   Val(Text22.Text)   And   &HF  
   
  If   Text23.Text   =   ""   Then  
          MsgBox   "请输入公共区编号(0---15)!"  
          Exit   Sub  
  End   If  
  Room1(5)   =   Val(Text23.Text)   And   &HF  
   
  Room2(0)   =   Room1(0)  
  Room2(1)   =   Room1(1)  
  Room2(2)   =   Room1(2)  
  Room2(3)   =   Room1(3)  
  Room2(4)   =   Room1(4)  
  Room2(5)   =   Room1(5)  
   
  Room3(0)   =   Room1(0)  
  Room3(1)   =   Room1(1)  
  Room3(2)   =   Room1(2)  
  Room3(3)   =   Room1(3)  
  Room3(4)   =   Room1(4)  
  Room3(5)   =   Room1(5)  
   
  Select   Case   Combo2.Text  
          Case   "T5557"  
                  st   =   Guest_Card_57(commdev,   RD_Add,   AUTH_CODE(0),   CARD_CODE(0),   Room1(0),   Room2(0),   Room3(0),   Start_Time(0),   End_Time(0))  
                  Select   Case   st  
                          Case   0  
                                  List1.AddItem   "宾客卡写成功!"  
                          Case   1  
                                  List1.AddItem   "宾客卡写失败!"  
                          Case   2  
                                  List1.AddItem   "宾客卡写失败!"  
                          Case   3  
                                  List1.AddItem   "宾客卡写失败!"  
                          Case   4  
                                  List1.AddItem   "宾客卡写失败!"  
                          Case   5  
                                  List1.AddItem   "卡片没有格式化!"  
                  End   Select  
          Case   "IC4442"  
                  st   =   Guest_Card_IC(commdev,   AUTH_CODE(0),   CARD_CODE(0),   Room1(0),   Room2(0),   Room3(0),   Start_Time(0),   End_Time(0))  
                  Select   Case   st  
                          Case   0  
                                  st   =   dv_beep(commdev,   10)  
                                  List1.AddItem   "宾客卡写成功!"  
                          Case   1  
                                  List1.AddItem   "宾客卡写失败!"  
                          Case   2  
                                  List1.AddItem   "宾客卡写失败!"  
                          Case   3  
                                  List1.AddItem   "宾客卡写失败!"  
                          Case   4  
                                  List1.AddItem   "宾客卡写失败!"  
                          Case   5  
                                  List1.AddItem   "卡片没有格式化!"  
                  End   Select  
  End   Select  
   
  End   Sub  
   
   
  能把它改称delphi的吗?  
  有点长,不过估计看得懂的也没什么,都是些重复的,呵呵,谢谢啦。 问题点数:100、回复次数:14Top

1 楼yesin163(破网)回复于 2006-06-04 13:02:52 得分 0

函数申明部分请给出一个例子就行了。谢谢  
   
  Top

2 楼liangqingzhi(老之)回复于 2006-06-04 13:15:01 得分 20

function   PortOpen_Temic(var   port:   Integer;   var   baud:   LongInt):   LongInt;   external   'T5557.DLL';Top

3 楼yesin163(破网)回复于 2006-06-04 14:02:01 得分 0

大侠,那个按钮执行的代码能不能解释一下,我不知道在delphi中如何写。。。Top

4 楼happyggy(Delphi<-&&->java)回复于 2006-06-04 17:46:15 得分 50

读写IC卡命令是16进制的  
  Top

5 楼jadeluo(秀峰)回复于 2006-06-04 18:00:23 得分 30

Declare   Function   PortOpen_Temic   Lib   "T5557.DLL"   (ByVal   port   As   Integer,   ByVal   baud   As   Long)   As   Long  
   
  VB中的Integer是16位的,   Long为32位,   所以改写为Delphi就要写成:  
   
  function   PortOpen_Temic(port:   ShortInt;   baud:   LongInt):   LongInt;   stdcall;     external   'T5557.DLL';  
  Top

6 楼afeng124(我是峰儿谁是沙)回复于 2006-06-04 18:29:55 得分 0

楼上的说的有道理。Top

7 楼yesin163(破网)回复于 2006-06-05 09:04:59 得分 0

Dim   Start_Time(5)   As   Byte  
  Dim   End_Time(5)   As   Byte      
  是定义数组吗?  
   
   
  其实那么多语句只为这句服务:  
  Guest_Card_57(commdev,   RD_Add,   AUTH_CODE(0),   CARD_CODE(0),   Room1(0),   Room2(0),   Room3(0),   Start_Time(0),   End_Time(0))  
   
  那么  
  Start_Time(0)   =   Right(Year(Now),   2)  
  Start_Time(1)   =   Month(Now)  
  Start_Time(2)   =   Day(Now)  
  Start_Time(3)   =   Hour(Now)  
  Start_Time(4)   =   Minute(Now)  
   
  End_Time(0)   =   Right(Year(Format(Text26.Text,   "yyyy-mm-dd   hh:mm:ss")),   2)  
  End_Time(1)   =   Month(Format(Text26.Text,   "yyyy-mm-dd   hh:mm:ss"))  
  End_Time(2)   =   Day(Format(Text26.Text,   "yyyy-mm-dd   hh:mm:ss"))  
  End_Time(3)   =   Hour(Format(Text26.Text,   "yyyy-mm-dd   hh:mm:ss"))  
  End_Time(4)   =   Minute(Format(Text26.Text,   "yyyy-mm-dd   hh:mm:ss"))  
   
  Start_Time的1/2/3/4和End_Time1/2/3/4算出来有什么意义呢??  
   
  请指点一下,这是个写RFID卡的函数,我想肯定的把开始时间和结束时间详细到秒写入卡内  
  但函数中只用到Start_Time(0),End_Time(0),有点不合理哦。请指点。  
   
   
   
  Top

8 楼happyggy(Delphi<-&&->java)回复于 2006-06-05 09:32:38 得分 0

VB:  
  Dim   Start_Time(5)   As   Byte  
  Dim   End_Time(5)   As   Byte      
  Delphi:  
  var  
      Start_Time:   array[0..4]   of   Byte  
      End_Time:   array[0..4]   of   Byte  
   
  写RFID卡好像要分块写入数据,  
  根据你说得意思好像还应改有,  
  Guest_Card_57(commdev,   RD_Add,   AUTH_CODE(1),   CARD_CODE(0),   Room1(1),   Room2(1),   Room3(1),   Start_Time(1),   End_Time(1))....  
  Top

9 楼yesin163(破网)回复于 2006-06-05 09:32:53 得分 0

还有这些:  
  Room2(0)   =   Room1(0)  
  Room2(1)   =   Room1(1)  
  Room2(2)   =   Room1(2)  
  Room2(3)   =   Room1(3)  
  Room2(4)   =   Room1(4)  
  Room2(5)   =   Room1(5)  
   
  Room3(0)   =   Room1(0)  
  Room3(1)   =   Room1(1)  
  Room3(2)   =   Room1(2)  
  Room3(3)   =   Room1(3)  
  Room3(4)   =   Room1(4)  
  Room3(5)   =   Room1(5)  
   
  直接用Room1不就好了吗??不知道是否例有用意呢?谢谢Top

10 楼yesin163(破网)回复于 2006-06-05 09:40:15 得分 0

to   happyggy(为爱情放弃事业?):  
  没有了,整个写卡的vb的代码就在这上面啊,我的意思是不是vb里面     Start_Time(0)是不是代表整个Start_Time数组?不然就不好解释了,只把年份写到卡里是没有意义的呀。  
   
  这是个门禁卡,客人可凭系统发的卡限时进入,比如Start_Time,end_Time来限制进入时间和出门时间,在此时间外的此卡就失效。Top

11 楼happyggy(Delphi<-&&->java)回复于 2006-06-05 10:58:30 得分 0

yesin163(破网)   ,  
  可能是这样,  
  Guest_Card_57(commdev,   RD_Add,   AUTH_CODE(0),   CARD_CODE(0),   Room1(0),   Room2(0),   Room3(0),   Start_Time(0),   End_Time(0))  
  这个函数传递的是数组的地址,当作为地址传递时,Start_Time(0)就代表整个数组了吧Top

12 楼yesin163(破网)回复于 2006-06-05 11:26:50 得分 0

哦,呵呵,这个样子的话在delphi中写Start_Time[0],   End_Time[0]也应该是可以的了?  
   
  哎,他们这个东西也作的太潦草了,没dll的函数说明,很难的有函数传递过去是传地址的  
  传完整时间过去不是很好嘛,呵呵,我得去客户那里尝试看看  
  Top

13 楼yesin163(破网)回复于 2006-06-05 11:27:44 得分 0

不知道有没其他的说法,搞定后结帖,谢谢啊Top

14 楼yesin163(破网)回复于 2006-06-06 21:46:41 得分 0

function   PortOpen_Temic(var   port:   Integer;   var   baud:   LongInt):   LongInt;   external   'T5557.DLL';  
   
  ByRef   ByVal  
   
  问题解决了,不过最终还是自己动手弄半天才搞定的,发现比较奇怪的问题  
  如楼上几位大哥说的函数定义部分都有问题,  
  比如Declare   Function   PortOpen_Temic   Lib   "T5557.DLL"   (ByVal   port   As   Integer,   ByVal   baud   As   Long)   As   Long  
  函数最终写法  
  Function   PortOpen_Temic(port:Word,   baud   :LongWord):LongWord;STDCALL;   external   'T5557.DLL';  
  才达到目的,否则要么函数执行没响应,要么干脆就是调处内存地址读写错误  
   
  呵呵.  
  结贴罗....  
  Top

相关问题

关键词

得分解答快速导航

  • 帖主:yesin163
  • liangqingzhi
  • happyggy
  • jadeluo

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo