本文目录一览:
- java web怎么调用dll
- 如何解决java调dll报Unable to load library的错误
- java调用dll,如何传入指针变量
- java调用c++ dll有几种方法
- 多个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.load
和System.loadLibrary
。如果在调用时出现Unable to load library
的错误,可以通过下面的步骤进行解决:
- 使用
System.load
时需要输入文件的全路径,比如:
如果使用该函数报错,首先需要检查路径是否写全写对,然后到指定的路径检查文件是否存在,有没有被隐藏或者加密;System.load("D:\\eclipse\\test.dll");
- 使用
System.loadLibrary
函数时,应用会在系统的library的目录中寻找符合条件的库文件,在Windows系统下,需要将需要加载的库文件(.dll)放在JDK安装目录下的include目录下,在Linux系统下一般是放到/usr/lib
目录下。 也可以使用-Djava.library.path=[path]
参数,来指定Java程序加载库文件的路径。 - 在Windows中,最好使用Windows的C/C++编译器生成dll文件,否则调用会有一些问题。
java调用dll,如何传入指针变量
问题解答:
- Java中调用指针类型的参数:需要创建Pointer变量,并为其分配空间
- 整形的数据可以直接传入;
- JNative对CString类型支持不是很良好,调用CString的方法时,经常会报一些异常,所以我把路径改成的字符指针;
- 输入型参数作为输出:可以参见以上的例子,数组c是如何设置和输出的。
java调用c++ dll有几种方法
我是通过一个外部的JAR包来间接来获得DLL文件的句柄 的,它就是jacob了,这是java com brige的简写,呵呵, 这个名称起得非常形象吧,我用的版本是jacob 1.9的,你可以到它的官方网站去下载,下载回来的压缩包中会有两个文件我们需要用到的,一个是jacob.dll
,一个是jacob.jar
,jacob.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);
}
}