我现在打算自己写代码读取考勤机数据,打算用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代码是: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)

解决方案 »

  1.   

    1:这个可以用java语句调用不?函数返回值是VARIANT_BOOL,那我在java里面用boolean可以正常否。
    VARIANT_BOOL对应的是C的short类型,如果同是32位系统,java也是short对应2:它没有给出参数类型,是否,我可以任意定义?
    参数已经给出类型了BSTR相当于字符串,和long,[in]表示是传入不传出参数3:有哪位高手,可以告诉我怎么进行调用啊?
    java调用第三方dll,通常的做法是,自己写个第二方dll,用第二方dll去调用第三方dll,因为第二方dll可以定义与java匹配的数据类型的接口,同时内部可以方便定义第三方dll的数据类型的变量,这样,第二方dll把调用的第三方dll的结果转成与java匹配的类型就很方便java调用了,论坛里很多帖子有涉及到这方面的问题,以前回答过很多,因为太久,懒得去搜索了,LZ自己搜索吧。
      

  2.   

    jni,jna网上有很文章介绍使用方法哦。
      

  3.   


    哥,请问:
    1.我是不是要专门研究下两个数据类型的参照表,但据我所知,好像c语言中的数据类型没有VARIANT_BOOL 这个玩意啊,和java差别不大啊,c系列的都该是如此,难道上面那个方法,不是c系列的?!!!
    2.我到网上找来很多少的关于java调用dll例子,都是说先写java代码,就是我上面那种,在用c环境写dll,这里是否就是你说的,第二方dll,即对于有现成的dll人来说,仍然要,先写java代码,配置vc环境,编写dll,最后才是调用现成的dll?对吗?
      

  4.   

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

  5.   


    1.我是不是要专门研究下两个数据类型的参照表,但据我所知,好像c语言中的数据类型没有VARIANT_BOOL 这个玩意啊,和java差别不大啊,c系列的都该是如此,难道上面那个方法,不是c系列的?!!!
    VARIANT_BOOL就是short,是COM的类型,C/C++可以用typedef声明
    typedef short VARIANT_BOOL;2.我到网上找来很多少的关于java调用dll例子,都是说先写java代码,就是我上面那种,在用c环境写dll,这里是否就是你说的,第二方dll,即对于有现成的dll人来说,仍然要,先写java代码,配置vc环境,编写dll,最后才是调用现成的dll?对吗?
    对的,就是先写java,用javah生成头文件,在C/C++端用该头文件写个dll,这就是第二方dll,然后这个第二方dll去调用第三方dll
      

  6.   

    楼主,你这个java调用dll后来是怎样解决的?我现在要搞个java调用C#的dll,怎么做?求指教!