java如何调用别人给的DLL文件

现在有一个DLL,是别人已经给好的,并且给出了函数的文档,现在我要用java来实现设个功能,如何调用别人给出的函数呢?最好给个例子。... 现在有一个DLL,是别人已经给好的,并且给出了函数的文档,现在我要用java来实现设个功能,如何调用别人给出的函数呢?最好给个例子。 展开
 我来答
趣事情
2016-01-01 · 知道合伙人互联网行家
趣事情
知道合伙人互联网行家
采纳数:517 获赞数:5452
电脑技术,软件开发。移动开发。网站建设相关专业知识。都可以提供解答和相关技术指导。

向TA提问 私信TA
展开全部
JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式)。通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的各接口方法。
简单介绍及应用如下:
一、JAVA中所需要做的工作
在JAVA程序中,首先需要在类中声明所调用的库名称,如下:
static {
System.loadLibrary(“goodluck”);
}

在这里,库的扩展名字可以不用写出来,究竟是DLL还是SO,由系统自己判断。
还需要对将要调用的方法做本地声明,关键字为native。并且只需要声明,而不需要具 体实现。如下:
public native static void set(int i);
public native static int get();
然后编译该JAVA程序文件,生成CLASS,再用JAVAH命令,JNI就会生成C/C++的头文件。
例如程序testdll.java,内容为:
public class testdll
{
static
{
System.loadLibrary("goodluck");
}
public native static int get();
public native static void set(int i);

public static void main(String[] args)
{
testdll test = new testdll();
test.set(10);
System.out.println(test.get());
}
}

用javac testdll.java编译它,会生成testdll.class。
再用javah testdll,则会在当前目录下生成testdll.h文件,这个文件需要被C/C++程序调用来生成所需的库文件。
jACKy劉
推荐于2017-10-14 · TA获得超过325个赞
知道小有建树答主
回答量:240
采纳率:100%
帮助的人:242万
展开全部

请参考 JNative 手册, 网上有. 这是调用标准C/C++动态库的最简单的方案.

调用步骤:

  •     加载 dll 中的方法:

JNative f_xxx= new JNative("dll文件", "方法名称", Convention.STDCALL);
f_xxx.setRetVal(Type.INT); //设置返回值

 

  • 调用:

   f_xxx.setParameter(0, 参数1);
   ...

   

  •    获取返回值

 
   f_xxx.getRetValAsInt() 或其他...
    更多追问追答
    追问
    你中间的调用环节只是设置参数啊,那怎么实际调用他的方法呢,我现在这样写,他返回的是null,理论上应该有值啊
    还有,这个参数是干什么用的Convention.STDCALL
    追答

    调用部分貌似被我编辑掉了, 应该这样调用:

    f_xxx.invoke();

    返回的是空, 你需要检查入参类型是否匹配, 这个要仔细核对. 返回类型如果没有值, 也要设定为 Type.VOID


    Convertion.STDCALL 是标记 dll中的这个函数声明的是 __stdcall 模式调用. 还有 __cdecl, __fastcall 其他2种类型, 通常都是 __stdcall

    本回答被提问者采纳
    已赞过 已踩过<
    你对这个回答的评价是?
    评论 收起
    llei32wang
    2013-09-02 · TA获得超过2736个赞
    知道大有可为答主
    回答量:1478
    采纳率:60%
    帮助的人:1388万
    展开全部
    JNI JNative 或者jacob都行 最理想的是用JNI 不过是用JNI比较麻烦,可能需要用C写数据类型转换的函数,但是能保证正确的调用Dll中的函数。Jacob和JNative也都不错,使用比较方法,但是可能无法成功的调用DLL的函数。
    已赞过 已踩过<
    你对这个回答的评价是?
    评论 收起
    收起 更多回答(1)
    推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

    为你推荐:

    下载百度知道APP,抢鲜体验
    使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
    扫描二维码下载
    ×

    类别

    我们会通过消息、邮箱等方式尽快将举报结果通知您。

    说明

    0/200

    提交
    取消

    辅 助

    模 式