当前位置:首页 » 编程软件 » javadll需要编译吗

javadll需要编译吗

发布时间: 2023-12-18 22:53:19

1. java调用DLL动态库

1、总体说明:实现一个函数,传入整形数i,返回值i*i,这个函数做在DLL中,java将通过JNI调用这个函数,传入一个参数,得到返回值。
确定DLL的名称为calldll.dll,函数shanfei(int i)。2、编写java程序javacall.java,如下:public class javacall
{
static
{
System.loadLibrary("calldll");
}
public native static int shanfei(int i);
public static void main(String[] args)
{
javacall jc = new javacall();
int j;
j = jc.shanfei(4);
System.out.println(j);
}
}3、编译javac javacall.java4、生成头文件javah -jni javacall
生成javacall.h文件5、制作VC++动态库建立新DLL工程,程序中添加:#include "javacall.h"
JNIEXPORT jint JNICALL Java_javacall_shanfei (JNIEnv *, jclass, jint p)
{
int j = p*p;
return j;
}别忘了将javacall.h复制到VC工程目录中,然后编译,如果编译说找不到jni.h文件,可以将jni.h复制到工程目录中,还可将javacall.h文件中的#include <jni.h>改为#include "jni.h",再编译。
编译生成DLL文件如“test.dll”,名称与System.loadLibrary("test")中的名称一致
vc的编译办法:cl -I%java_home%include -I%java_home%includewin32 -LD com_hode_hodeframework_modelupdate_CheckFile.c -Fetest.dll
最后在运行时加参数-Djava.library.path=[dll寄存的路径]
相关的主题文章: 6、java调用将生成的calldll.dll文件复制到javacall.java所在的目录中,运行java javacall,应该可以看到运行结果。

2. java中怎么编写dll文件........最好举个例子

你是指使用动态链接吗?这个可以用java中的反射机制做到,但是java中是没有动态链接库这种东西的。如果你指的是java调用本地dll的话,是使用jni技术,dll也不是java编写的。总是java是不可能编译成为dll。有一种这种的方案,就是将java编译的文件转换为c#的,微软有相应的工具,可以搜到,然后就可以打包成为dll了。

3. 请问:Java能编写DLL吗

貌似不能(不是不确切,是我的口头禅)
因为Java编程是跨平台的,它不可能只编写适用了Windows平台的东西。不过它有相应的东西,这个可以适用于Linux等等平台的!

4. java为什么要编译

因为java的跨平台特性,java所谓的一次编译,到处运行,关键就是在于java的虚拟机,也就是jvm,jvm只认识字节码,所以你写好的java代码就需要编译成字节码才能在jvm上运行。其实不只是java需要编译,C也需要编译,机器本身并不能认识你写的代码,它们只认识0、1这样的字节码,所以无论是你用什么样的语言编写的代码,要想最终在物理机器上运行,都要进行编译。

5. java 如何调用dll

JAVA以其跨平台的特性深受人们喜爱,而又正由于它的跨平台的目的,使得它和本地机器的各种内部联系变得很少,约束了它的功能。解决JAVA对本地操作的一种方法就是JNI。
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++程序调用来生成所需的库文件。
二、C/C++中所需要做的工作
对于已生成的.h头文件,C/C++所需要做的,就是把它的各个方法具体的实现。然后编译连接成库文件即可。再把库文件拷贝到JAVA程序的路径下面,就可以用JAVA调用C/C++所实现的功能了。
接上例子。我们先看一下testdll.h文件的内容:

#i nclude <jni.h>

#ifndef _Included_testdll
#define _Included_testdll
#ifdef __cplusplus
extern "C" {
#endif

JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass);

JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint);
#ifdef __cplusplus
}
#endif
#endif
在具体实现的时候,我们只关心两个函数原型
JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass); 和
JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint);
这里JNIEXPORT和JNICALL都是JNI的关键字,表示此函数是要被JNI调用的。而jint是以JNI为中介使JAVA的int类型与本地的int沟通的一种类型,我们可以视而不见,就当做int使用。函数的名称是JAVA_再加上java程序的package路径再加函数名组成的。参数中,我们也只需要关心在JAVA程序中存在的参数,至于JNIEnv*和jclass我们一般没有必要去碰它。
好,下面我们用testdll.cpp文件具体实现这两个函数:
#i nclude "testdll.h"
int i = 0;
JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass)
{
return i;
}
JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint j)
{
i = j;
}
编译连接成库文件,本例是在WINDOWS下做的,生成的是DLL文件。并且名称要与JAVA中需要调用的一致,这里就是goodluck.dll 。把goodluck.dll拷贝到testdll.class的目录下,java testdll运行它,就可以观察到结果了。

6. 现在我有一个DLL文件,我想在JAVA中调用DLL文件中的方法,请问如何实现

一般那种c#的dll是java不能直接调用的,但C\C++可以,你可以使用JNI。比如你要一个 public native void sengMsg(String msg); 来发送信息,先用native关键字声明这个函数,然后再类里面加一个静态块: static { System.loadLibrary("msg"); } 这里的msg是你的后来编译的dll文件名,不是短信猫带的。 然后写其他的函数就可以调用这个方法了,写完后用javac编译,得到class文件,然后用 javah -jni 你的class文件 就会得到一个.h的头文件,用visual studio新建一个dll,把那个.h文件包含进去,用C\C++调用你现有的dll,然后编译得到你的msg.dll,把它复制到你的class文件目录,然后就可以调试运行了。

热点内容
编程第一天 发布:2024-11-17 06:22:28 浏览:597
安卓媒体存储器 发布:2024-11-17 06:22:26 浏览:12
怎么做windows服务器集群 发布:2024-11-17 06:19:59 浏览:693
php的ide 发布:2024-11-17 06:19:56 浏览:397
如何启用安卓键盘 发布:2024-11-17 06:19:14 浏览:513
电脑电池怎么配置 发布:2024-11-17 06:17:47 浏览:9
编程的男 发布:2024-11-17 06:07:43 浏览:515
工银电子密码器有什么用 发布:2024-11-17 06:07:43 浏览:298
安卓tim快传文件存储在哪里 发布:2024-11-17 05:54:03 浏览:613
pythonwindows后台运行 发布:2024-11-17 05:54:02 浏览:273