当前位置: 代码迷 >> Java Web开发 >> 紧急求援啊关于java调用dll库文件
  详细解决方案

紧急求援啊关于java调用dll库文件

热度:4850   发布时间:2013-02-25 21:16:37.0
紧急求援啊,在线等,关于java调用dll库文件。
我现在打算自己写代码读取考勤机数据,打算用java调用dll。

现在给出的原型是:

Connect_Net
【函数定义】
VARIANT_BOOL Connect_Net( [in] BSTR IPAdd, [in] long Portl)
【功能】
通过IP地址连接机器,和机器建立一个网络连接
【参数】
IPAdd:
机器的IP地址。
Port:
连接机器时使用的端口号,默认为4370.
【返回值】
连接成功返回True,否则返回False
【相关函数】
Disconnect、Connect_Com
我现在写的java代码是:

Java code
public class test {            public native boolean Connect_Net(String x,int y);        static{        System.loadLibrary("zkemkeeper");    }        public static void main(String[] args)    {                                System.out.println(new test().Connect_Net("192.168.0.10",4370));    }}


他给了我一堆的dll,没有说这个方法在那个dll中,只是说要注册zkemkeeper.dll,所以我估计,这个dll是其他dll的入口。
我下载的是jacob1.7配置估计应该没有问题。
问题1:这个可以用java语句调用不?函数返回值是VARIANT_BOOL,那我在java里面用boolean可以正常否。
2:它没有给出参数类型,是否,我可以任意定义?
3:有哪位高手,可以告诉我怎么进行调用啊?
运行以后的异常信息是:
Exception in thread "main" java.lang.UnsatisfiedLinkError: Connect_Net  
  at test.Connect_Net(Native Method)
  at test.main(test.java:16)

------解决方案--------------------------------------------------------
使用jni大概流程是这样的
1、首先你明确你需要调用现有dll的哪些方法
2、然后写java声明你需要调用的方法(这里你先不管类型,你按java思路完成方法声明)
3、将你写的java文件生成.h头文件
4、自己编写dll,引入第三步中的.h头文件,并且实现其中的方法,这里实现的话,就是调用另一个现有的dll方法。
5、编译好后将你生成的dll和原来的dll放到system32或者项目或者jdk环境中,ok完成
------解决方案--------------------------------------------------------
探讨
引用:

1:这个可以用java语句调用不?函数返回值是VARIANT_BOOL,那我在java里面用boolean可以正常否。
VARIANT_BOOL对应的是C的short类型,如果同是32位系统,java也是short对应

2:它没有给出参数类型,是否,我可以任意定义?
参数已经给出类型了BSTR相当于字符串,和long,[in]表示是传入不传出参数

3:……
  相关解决方案