紧急求援啊,在线等,关于java调用dll库文件。

lxpandsq 2012-07-06 08:35:24
我现在打算自己写代码读取考勤机数据,打算用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)
...全文
382 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
clever101 2015-03-23
  • 打赏
  • 举报
回复
楼主,使用jacob吧。
zar19901007 2013-05-13
  • 打赏
  • 举报
回复
楼主,你这个java调用dll后来是怎样解决的?我现在要搞个java调用C#的dll,怎么做?求指教!
R3 2013-04-24
  • 打赏
  • 举报
回复
我也在做这个啊~~不过我用的是C#,现在也似一头雾水啊~~
qybao 2012-07-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
引用 4 楼 的回复:

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

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

3:……
[/Quote]

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
OnEstepEnD 2012-07-07
  • 打赏
  • 举报
回复
使用jni大概流程是这样的
1、首先你明确你需要调用现有dll的哪些方法
2、然后写java声明你需要调用的方法(这里你先不管类型,你按java思路完成方法声明)
3、将你写的java文件生成.h头文件
4、自己编写dll,引入第三步中的.h头文件,并且实现其中的方法,这里实现的话,就是调用另一个现有的dll方法。
5、编译好后将你生成的dll和原来的dll放到system32或者项目或者jdk环境中,ok完成
lxpandsq 2012-07-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

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

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

3:有哪位高手,可以告诉我怎么进……
[/Quote]

哥,请问:
1.我是不是要专门研究下两个数据类型的参照表,但据我所知,好像c语言中的数据类型没有VARIANT_BOOL 这个玩意啊,和java差别不大啊,c系列的都该是如此,难道上面那个方法,不是c系列的?!!!
2.我到网上找来很多少的关于java调用dll例子,都是说先写java代码,就是我上面那种,在用c环境写dll,这里是否就是你说的,第二方dll,即对于有现成的dll人来说,仍然要,先写java代码,配置vc环境,编写dll,最后才是调用现成的dll?对吗?
BUG弄潮儿 2012-07-07
  • 打赏
  • 举报
回复
使用jna调用很简单就行
lxpandsq 2012-07-06
  • 打赏
  • 举报
回复
怎么就没人支持下啊。
brightyq 2012-07-06
  • 打赏
  • 举报
回复
jni,jna网上有很文章介绍使用方法哦。
lxpandsq 2012-07-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
我也对这个问题感兴趣,等答案
[/Quote]

哥,我很急啊。你别逗了。
di_wq 2012-07-06
  • 打赏
  • 举报
回复
我也对这个问题感兴趣,等答案
qybao 2012-07-06
  • 打赏
  • 举报
回复
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自己搜索吧。




81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧