java调用dll,java调用dll 参数传递

发布时间:2022-11-30

本文目录一览:

  1. java web怎么调用dll
  2. 如何解决java调dll报Unable to load library的错误
  3. java调用dll,如何传入指针变量
  4. java调用c++ dll有几种方法
  5. 多个dll文件在java中怎么调用

java web怎么调用dll

java调用dll要用到jni(java本地接口) 例如程序TestDll.java,内容为:

public class TestDll
{
    static
    {
        System.loadLibrary("xxx.dll");
    }
    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());
    }
}

这个例子只是为了示意jni如何用,并不是实际的工程代码。 你可以搜索一下jni的详细信息,通常都有详细的例子(如使用user32.dll的例子)

如何解决java调dll报Unable to load library的错误

java调用dll文件有两个函数,分别为System.loadSystem.loadLibrary。如果在调用时出现Unable to load library的错误,可以通过下面的步骤进行解决:

  1. 使用System.load时需要输入文件的全路径,比如:
    System.load("D:\\eclipse\\test.dll");
    
    如果使用该函数报错,首先需要检查路径是否写全写对,然后到指定的路径检查文件是否存在,有没有被隐藏或者加密;
  2. 使用System.loadLibrary函数时,应用会在系统的library的目录中寻找符合条件的库文件,在Windows系统下,需要将需要加载的库文件(.dll)放在JDK安装目录下的include目录下,在Linux系统下一般是放到/usr/lib目录下。 也可以使用-Djava.library.path=[path]参数,来指定Java程序加载库文件的路径。
  3. 在Windows中,最好使用Windows的C/C++编译器生成dll文件,否则调用会有一些问题。

java调用dll,如何传入指针变量

问题解答:

  1. Java中调用指针类型的参数:需要创建Pointer变量,并为其分配空间
  2. 整形的数据可以直接传入;
  3. JNative对CString类型支持不是很良好,调用CString的方法时,经常会报一些异常,所以我把路径改成的字符指针;
  4. 输入型参数作为输出:可以参见以上的例子,数组c是如何设置和输出的。

java调用c++ dll有几种方法

我是通过一个外部的JAR包来间接来获得DLL文件的句柄 的,它就是jacob了,这是java com brige的简写,呵呵, 这个名称起得非常形象吧,我用的版本是jacob 1.9的,你可以到它的官方网站去下载,下载回来的压缩包中会有两个文件我们需要用到的,一个是jacob.dll,一个是jacob.jarjacob.dll可以将它复制到系统的system32目录下,而jacob.jar文件,直接将它加入到项目的库中就可以了。这两项准备工作完成后,就可以开始尝试调用了。 新建一个类,引入jacob.jar中的两个类:

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;

然后通过dll的ControllerId来读取DLL文件:

public class Print {
    private ActiveXComponent printController = null;
    private Dispatch printObj = null;
    /**
     * 默认controllerId的方法
     */
    public Print(){
        try{
            printController = new ActiveXComponent(POSControler.Controler);
            printObj = (Dispatch)printController.getObject();
        }catch(Exception e){
            printObj = new Dispatch();
        }
    }
}

如果方法dll中的方法是空参数时,直接call一下就可以了,如:

Dispatch.call(printObj, "setDefaultFont");

而调用有参数的方法时,则需要将参数在后面依次传入,注意按顺序噢:

多个dll文件在java中怎么调用

可以调用,别说是DLL了,就是COM都可以调用的!

class firstJNI
{
    public native void displayHelloWorld();
    public native void displayOther();
    private native String getLine(String prompt);
    static {
        System.loadLibrary("firstJNI"); // This is firstJNI.DLL
        /*
        if generated by borland
        System.loadLibrary("firstjni"); // This is firstjni.dll
        */
    }
    public static void main(String[] args)
    {
        firstJNI JN = new firstJNI();
        JN.displayHelloWorld();
        JN.displayOther();
        String input = JN.getLine("Enter Some Thing ");
        System.out.println("You Entered " + input);
    }
}