一个关于applet访问硬件的问题??

厂家提供了两个DLL文件和JAVA程序,我自己写了一个applet和一个html文件,内容如下:请各位大侠们帮帮小弟看看,是错在哪里?谢谢!
我的目录结构是:在bin下面建了一个nhis的文件夹:在下面分别建了一个dcic和一个nhis,文件dcic32.dll,Rd600.dll,Rd600.java存放在dcic下面。myApplet.java放在nhis/nhis下面。test.html放在nhis下面。

一、厂家提供的Rd600.java:
/*
 该程序的使用方法:
 编译Rd600.java,注意Rd600大小写!
 javac Rd600.java
 即可生成Rd600.class
*/
package nhis.dcic;
public class Rd600
{
 /*一个小例子函数,可以做调试用*/
 public int add_s(int i)
 {
  return i+1;
 }
 public native int IC_InitComm(int port);
 public native int IC_ExitComm(int icdev);
 public native int IC_Status(int icdev);
 public native int IC_InitType(int icdev,int ctype);
 //2003-02-11
 public native int IC_Down(int icdev);
 
 
 //2004-12-8
 public native int IC_InitCommAdvanced(int port);
    public native int IC_Reset(int idComDev);
 public native int IC_DevBeep(int icdev,char beeptime);
 public native int IC_ReadVer(int icdev,char[] Ver);
    public native int IC_ReadDevice(int idComDev,short offset,short len, char[] databuffer);
    public native int IC_WriteDevice(int idComDev,short offset,short len, char[] databuffer);
    public native int IC_ReadDevice_Hex(int idComDev,short offset,short len, char[] databuffer);
    public native int IC_WriteDevice_Hex(int idComDev,short offset,short len, char[] databuffer);
    public native int IC_Encrypt( char[] key,char[] ptrSource, short msgLen, char[] ptrDest);
    public native int IC_Decrypt( char[] key,char[] ptrSource, short msgLen, char[] ptrDest);
    public native int IC_Encrypt_Hex( char[] key,char[] ptrSource, short msgLen, char[] ptrDest);
    public native int IC_Decrypt_Hex( char[] key,char[] ptrSource, short msgLen, char[] ptrDest);
    public native int IC_InitComm_Baud(int port,int combaud);
    public native int IC_SetCommTimeout(int lTime_ms,int sTime_ms);
    //cpu
    public native int IC_CpuReset(int idComDev, char[] rlen, char[] databuffer);
    public native int IC_CpuApdu(int idComDev, char slen, char[] sendbuffer,char[] rlen, char[] databuffer);
    public native int IC_CpuApduSource(int idComDev, char slen, char[] sendbuffer,char[] rlen, char[] databuffer);
    public native int IC_CpuReset_Hex(int idComDev, char[] rlen, char[] databuffer);
    public native int IC_CpuApdu_Hex(int idComDev, char slen, char[] sendbuffer,char[] rlen, char[] databuffer);
    public native int IC_CpuApduSource_Hex(int idComDev, char slen, char[] sendbuffer,char[] rlen, char[] databuffer);
    public native int IC_CpuGetProtocol(int idComDev);
    public native int IC_CpuApduRespon(int idComDev, char slen, char[] sendbuffer,char[] rlen, char[] databuffer);
    public native int IC_CpuSetProtocol(int idComDev,char cardp);
   
   
 //4442
 public native int ReadCount_SLE4442(int icdev);
 public native int CheckPass_4442hex(int icdev,char[] data);
 public native int ChangePass_4442hex(int icdev,char[] data);
 public native int CheckPass_SLE4442(int icdev,char[] data);
 public native int ChangePass_SLE4442(int icdev,char[] data);
 //2004-12-8
 public native int ReadPass_SLE4442(int icdev,char[] data);
 public native int ReadPass_4442hex(int icdev,char[] data);
 public native int ReadWithProtection_SLE4442(int icdev, short offset,short len,char[] data);
 public native int WriteWithProtection_SLE4442(int icdev, short offset,short len,char[] data); 
 //
 
 //4428
 public native int ReadCount_SLE4428(int icdev);
 public native int CheckPass_4428hex(int icdev,char[] data);
 public native int ChangePass_4428hex(int icdev,char[] data);
 public native int CheckPass_SLE4428(int icdev,char[] data);
 public native int ChangePass_SLE4428(int icdev,char[] data);
 //2004-12-8
 public native int ReadWithProtection_SLE4428(int icdev, short offset,short len,char[] data);
 public native int WriteWithProtection_SLE4428(int icdev, short offset,short len,char[] data); 
 //
 
 public native int IC_Read_Hex(int icdev,int offset,int len,char[] databuf);
 public native int IC_Read(int icdev,int offset,int len,char[] databuf);
 public native int IC_Write_Hex(int icdev,int offset,int len,char[] data);
 public native int IC_Write(int icdev,int offset,int len,char[] data); 
 
 //102 2004-12-8
    public native int IC_Erase(int idComDev,short offset,short len);
    public native int IC_Erase_102(int idComDev,short offset,short len);
    public native int IC_Fuse_102(int idComDev);
    public native int IC_ReadCount_102(int idComDev);
    public native int IC_CheckPass_102(int idComDev,char[] password);
    public native int IC_ChangePass_102(int idComDev,char[] password);
    public native int IC_CheckAZPass_102(int idComDev,short zone, char[] password);
    public native int IC_ChangeAZPass_102(int idComDev,short zone, char[] password);
    public native int IC_CheckPass_102hex(int idComDev,char[] password);
    public native int IC_ChangePass_102hex(int idComDev,char[] password);
    public native int IC_CheckAZPass_102hex(int idComDev,short zone, char[] password);
    public native int IC_ChangeAZPass_102hex(int idComDev,short zone, char[] password);


 /*24系列卡专用*/
 public native int IC_Write24_Hex(int icdev,int offset,int len,char[] data); 
 public native int IC_Write24(int icdev,int offset,int len,char[] data);
 //2004-12-8
 public native int IC_Write64_Hex(int icdev,int offset,int len,char[] data); 
 public native int IC_Write64(int icdev,int offset,int len,char[] data);
 
 
 //45DB041 2004-12-8
 public native int IC_DirectRead(int idComDev,short page,short offset,short bytes,char[] buff);
 public native int IC_DirectWrite(int idComDev,short page,short offset,short bytes,char[] buff);
 public native int IC_DirectRead_Hex(int idComDev,short page,short offset,short bytes,char[] buff);
 public native int IC_DirectWrite_Hex(int idComDev,short page,short offset,short bytes,char[] buff);
 
//SSF1101 2004-12-8
 public native int IC_Read_1101(int idComDev,short page,short offset,short bytes,char[] buff);
 public native int IC_Write_1101(int idComDev,short page,short offset,short bytes,char[] buff);
 public native int IC_Read_1101hex(int idComDev,short page,short offset,short bytes,char[] buff);
 public native int IC_Write_1101hex(int idComDev,short page,short offset,short bytes,char[] buff);
//
 
//4404 2004-12-8
 public native int IC_Fuse_4404(int icdev);
 public native int IC_ReadCount_4404(int icdev);
 public native int IC_CheckPass_4404(int idComDev, char[] password);
 public native int IC_ChangePass_4404(int idComDev, char[] password);
 public native int IC_CheckAZPass_4404(int idComDev, char[] password);
 public native int IC_ChangeAZPass_4404(int idComDev, char[] password);
 public native int IC_CheckPass_4404hex(int idComDev, char[] password);
 public native int IC_ChangePass_4404hex(int idComDev, char[] password);
 public native int IC_CheckAZPass_4404hex(int idComDev, char[] password);
 public native int IC_ChangeAZPass_4404hex(int idComDev, char[] password);
 
 
//4406 2004-12-8
 public native int IC_RValue(int idComDev);
 public native int IC_DEValue(int idComDev,short num);
 public native int IC_Fuse_4406(int icdev, short value);
 public native int IC_ReadCount_4406(int icdev);
 public native int IC_CheckPass_4406(int idComDev, char[] password);
 public native int IC_Erase_4406(int idComDev, char offset);
 public native int IC_CheckPass_4406hex(int idComDev, char[] password);
 public native int IC_CheckPass_4406userhex(int idComDev, char[] password);
 public native int IC_CheckPass_4406user(int idComDev, char[] password);

 /*1604卡专用*/
 public native int IC_Fuse_1604(int icdev);
 public native int ReadCount_1604(int icdev,int area);
 public native int CheckPass_1604hex(int icdev,int area,char[] data);
 public native int ChangePass_1604hex(int icdev,int area,char[] data);
 public native int CheckPass_1604(int icdev,int area,char[] data);
 public native int ChangePass_1604(int icdev,int area,char[] data); 
 
 //1604B 2004-12-8
 public native int IC_Fuse_1604B(int icdev);
 public native int IC_ReadCount_1604B(int icdev,int area);
 public native int IC_CheckPass_1604Bhex(int icdev,int area,char[] data);
 public native int IC_ChangePass_1604Bhex(int icdev,int area,char[] data);
 public native int IC_CheckPass_1604B(int icdev,int area,char[] data);
 public native int IC_ChangePass_1604B(int icdev,int area,char[] data);  
 
 /*1608 卡专用函数*/
 public native int IC_CheckRPassword_Hex(int icdev,int Zone,char[] Pin);
 public native int IC_CheckWPassword_Hex(int icdev,int Zone,char[] Pin); 
 public native int IC_CheckRPassword(int icdev,int Zone,char[] Pin);
 public native int IC_CheckWPassword(int icdev,int Zone,char[] Pin);
 public native int IC_ChangeRPassword_Hex(int icdev,int Zone,char[] Pin);
 public native int IC_ChangeWPassword_Hex(int icdev,int Zone,char[] Pin); 
 public native int IC_ChangeRPassword(int icdev,int Zone,char[] Pin);
 public native int IC_ChangeWPassword(int icdev,int Zone,char[] Pin);   

 public native int IC_WriteFuse(int icdev,int fusetype);
 public native int IC_ReadFuse(int icdev);
 
 public native int IC_WriteUserZone(int icdev,int offset,int len,char[] data); 
 public native int IC_WriteConfigZone(int icdev,int offset,int len,char[] data);  
 public native int IC_WriteUserZone_Hex(int icdev,int offset,int len,char[] data); 
 public native int IC_WriteConfigZone_Hex(int icdev,int offset,int len,char[] data); 
 public native int IC_ReadUserZone(int icdev,int offset,int len,char[] data); 
 public native int IC_ReadConfigZone(int icdev,int offset,int len,char[] data);  
 public native int IC_ReadUserZone_Hex(int icdev,int offset,int len,char[] data); 
 public native int IC_ReadConfigZone_Hex(int icdev,int offset,int len,char[] data);     
 public native int IC_ReadWPasswordCount(int icdev,int Zone);
 public native int IC_ReadRPasswordCount(int icdev,int Zone);  
 public native int IC_SetUserZone(int icdev,int Zone); 
 
 
//2个工具函数,用于字符串格式的转换   2004-12-8
    public native int hex2asc(char[] strhex, char[] strasc,short len);
    public native int asc2hex(char[] strasc, char[] strhex,short len);  
  
 /**/
 public Rd600()
 {
 
 }
 /*
  包含了动态库Rd600.dll的名字,动态库应该放在系统目录(windows/system32)当前目录!
 */
 static
 {
  System.loadLibrary( "Rd600" ); 
 }
}
说明文件已经成功编译并测试过,能够正常运行。包括dcic32.dll和Rd600.dll都放在了system32及%JAVA_HOME%/bin和%JAVA_HOME%/bin/nhis/dcic/下面。同时也打包成dcic.jar放在ext目录下。
二、测试文件JavaCardNo.java
import java.io.*;

class JavaCardNo extends Rd600
{
 public static void main( String[] args) throws IOException
 {
  Rd600 obj = new Rd600();
  int icdev,st,i,Rtn = 0;
  boolean bna;
  char bptime;
  char [] pass =new char [6];
  char [] len = new char [2];
  char [] rdata=new char [33];
  char [] wdata=new char [32];
  char [] rstdata = new char [64];
  int itype;
  short sOffset,sLen,sPage;
  char cLen;
  //初始化通讯口
  icdev=obj.IC_InitComm(0);
  if (icdev<=0)
  {
   System.out.println("Init comm Error");
   return ;
  }
  else
  {
   System.out.println("Init comm OK");
  }
  bptime=90;
   //响蜂鸣器
  st=obj.IC_DevBeep(icdev,bptime);
  if (st!=0)
  {
   System.out.println("IC_DevBeep Error");
   return;
  }
  System.out.println("IC_DevBeep OK");
  
  st=obj.IC_Status(icdev);
  if (st!=0)
  {
   if (st==1)
   {
   System.out.println("NO card");
       
   }
   else
   {
   System.out.println("Status Error");
   }
   return;
  }
   System.out.println("Status OK");
  itype=4;
  st = obj.IC_InitType(icdev,itype);
  if (st!=0)
  {
   System.out.println("Inittype 4428 error");
   return;
  }
  System.out.println("Inittype ok");
        //从此读取25位卡号.
  st=obj.IC_Read(icdev,80,25,rdata);
  if (st!=0)
  {
   System.out.println("Read Error");
   return ;  
  }
  String IcCardNo = "";
  for(int j =0;j<25;j++)
           {
           IcCardNo=IcCardNo+rdata[j];
            }
  System.out.println(IcCardNo);
     System.out.println("测试成功。/n");      
                             
        
 }    
}

测试结果:
d:/j2sdk/bin/>java JavaCardNo
Init comm OK
IC_DevBeep OK
Status OK
Inittype OK
62463320071821248D6C32345
三、我写的applet如下:
package nhis;
import java.awt.*;
import java.applet.*;

import nhis.dcic.Rd600;

public class  nhis extends Applet{   
  int icdev=0;
        int lDevice = 0, Rtn = 0, st=0;

        private String cardNo="";       
       
 public String getCardNo() {
  return cardNo;
 }
       
       public void setCardNo(String cardNo)
       {
  this.cardNo = cardNo;
       }
      
       public String getNo(String a)
       {
  return a;
       }
      
       public   void   init() {
        Rd600 obj = new Rd600();
  char bptime; 
  char [] len = new char [2];
  char [] rdata=new char [33]; 
  int itype;
 
        try{
  //初始化通讯口
  icdev=obj.IC_InitComm(0);
  if (icdev<=0)
  {
   System.out.println("Init comm Error");
   return ;
  }
  else
  {
   System.out.println("Init comm OK");
  }
  bptime=90;
   //响蜂鸣器
  st=obj.IC_DevBeep(icdev,bptime);
  if (st!=0)
  {
   System.out.println("IC_DevBeep Error");
   return;
  }
  System.out.println("IC_DevBeep OK");
  
  st=obj.IC_Status(icdev);
  if (st!=0)
  {
   if (st==1)
   {
   System.out.println("NO card");
       
   }
   else
   {
   System.out.println("Status Error");
   }
   return;
  }
   System.out.println("Status OK");
  itype=4;
  st = obj.IC_InitType(icdev,itype);
  if (st!=0)
  {
   System.out.println("Inittype 4428 error");
   return;
  }
  System.out.println("Inittype Ok");   
       
  //从此读取25位卡号.
  st=obj.IC_Read(icdev,80,25,rdata);
  if (st!=0)
  {
   System.out.println("Read Error");
   return ;  
  }
  String IcCardNo = "";
  for(int j =0;j<25;j++)
           {
           IcCardNo=IcCardNo+rdata[j];
            }
     this.setCardNo(IcCardNo);

         }catch(Exception ee)
         {
          this.setCardNo(""+ee);
         }
    }
  
    public void paint(Graphics g)
    {
               g.drawString(this.getCardNo(),50,50);
        
    }
}
说明:能够编译通过,生成class文件。
四、我的html文件如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Hello World</title>

<script language="Javascript" type="text/JavaScript">
var s =""
function init()
{   
    s = document.at.getCardNo();
 alert(s); 
 
    var byte_array = new Array();
    for(var i = 0; i < 6; i ++)
     {
       byte_array[i] = 'a';
     } 
   
    s=document.at.getNo(byte_array);
   
    alert(s);
  
}
</script>
</head>
<body οnlοad="init()">
<applet codebase="."  name="at" code="nhis.myApplet" width="200"  height="100"></applet>
</body>
</html>
错误提示如下:
D:/j2sdk/bin>appletviewer nhis/test.html
java.lang.UnsatisfiedLinkError: IC_InitComm
        at nhis.dcic.Rd600.IC_InitComm(Native Method)
        at nhis.nhis.init(nhis.java:36)
        at sun.applet.AppletPanel.run(AppletPanel.java:353)
        at java.lang.Thread.run(Thread.java:534)

求各位大侠指点,小弟弟谢谢各位! 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

eshowsoft

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值