java编译生成dll
⑴ 用java怎么调用C语言已经编写好的DLL
1.用System.getProperty("user.dir"),获取程序的路径,估计你的应该是 E:\\测试程序不清楚打印一下就可以了。System.getProperty("user.dir") + "\\DLL\\CardAPI"2.unsigned char 用char就可以了unsigned int 用int就可以了,java的int值很大.....C的无符号的记得是65535 unsigned char*、和unsigned int* 这两个是指针,第一个是取1位地址内容的,第二个根据系统而定,一般是取4位地址值的,用java 的String对应,应该可以 。
⑵ java中怎么编写dll文件........最好举个例子
你是指使用动态链接吗?这个可以用java中的反射机制做到,但是java中是没有动态链接库这种东西的。如果你指的是java调用本地dll的话,是使用jni技术,dll也不是java编写的。总是java是不可能编译成为dll。有一种这种的方案,就是将java编译的文件转换为c#的,微软有相应的工具,可以搜到,然后就可以打包成为dll了。
⑶ 如果用java写一个dll、需要不要在使用这个dll的程序上面再去安装java的运行环境
朋友你问的问题有点太搞笑了吧,java编写的文件编译后是.class的文件,只有使用C/C++,VB这些东西才能编写出DLL文件。java文件是需要JDK才能运行的,DLL文件叫动态链接库,是不能直接运行的。
⑷ java程序能直接调用C写好的dll文件吗
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++程序调用来生成所需的库文件。
⑸ dll 文件如何做 java 语言编出的程序不能做成 dll 文件吗
dll是动态链接库文件,链接什么库呢? 链接的是windows的库! 而Java是跨平台的,根本不依赖于windows,你说Java会不会做出dll呢?
⑹ java 调用C写的DLL
一、 生成C的头文件
1. 编辑Main.java
public class Main
{
public native static int getStrNum(byte str[], int strLen);
}
2. 生成头文件
按win + r打开“运行”窗口,输入“cmd”,打开DOS控制台窗口。进入上面Main.java所在的目录中,输入:
javac Main.java
javah Main
两条命令完成后会生成Main.h文件
二、 生成DLL
1. 新建空工程
在VS中新建工程:Win32 Console Application,取名“MakeDLL”,选择空工程。新建后修改工程属性:
(1) General中,将“Configuration Type”改为“Dynamic Library (.dll)”;
(2) C/C++的General中,将“Additional Include Directories”添加两项:
“C:Program FilesJavajdk1.5.0_06include”
“C:Program FilesJavajdk1.5.0_06includewin32”
根据你安装的JAVA路径而设置,这是因为在C/C++编译过程中要使用JAVA的jni.h等文件
2. 将上面生成的Main.h添加入工程
3. 新建一个新的文件main.cpp,代码如下:
#include ’Main.h’
#include ’string.h’
JNIEXPORT jint JNICALL Java_Main_getStrNum(JNIEnv *env, jclass cls, jbyteArray str, jint strLen)
{
jbyte *buffer = (*env).GetByteArrayElements(str, 0);
buffer[strLen] = ’’; // 由于JAVA自动分配空间,需要传进来字符串长度参数
jint len = strlen((char*)buffer);
return len;
}
4. 按F7编译链接,生成MakeDLL.dll文件
三、 JAVA调用DLL
在JAVA中使用上面生成的DLL文件:
1. 将MakeDLL.dll复制到与使用DLL的JAVA文件相同的目录下。
2. JAVA文件的源代码:
public class Main
{
static
{
System.loadLibrary(’MakeDLL’);//加载资源文件MakeDLL.dll
}
public native static int getStrNum(byte str[], int strLen);
public static void main(String[] args)
{
Main instance = new Main();
String str = new String(’haha’);
int num = instance.getStrNum(str.getBytes(), str.length());
System.out.println(num);
}
}
⑺ 如何用Java调用c++生成的dll文件
1
首先要安装好Visual Studio 2010 (其他版本也行)以及JDK(别忘了配置环境变量),然后安装Eclipse。以上软件安装可自行网络,有很多资料。
2
进入正题,首先在Eclipse中新建工程,File->New->Java Project
3
然后右击DllTest,New->package,再右击src目录下的com包,New->Class。这样我们的Java项目就建好了。
4
再
建好的类文件Dlltest.java里添加代码。主要是导入dll文件的loadlibrary函数和要调用的函数声明shanfei。代码详
见 http://blog.csdn.net/lovesummerforever/article/details/25827199
END
编译Java工程并生成VC要用到的头文件
1
现
在打开cmd,先进到当前java文件所在的目录,用cd xxx\xxx
命令即可,返回上一级目录用cd..命令(注意后面的俩点)。到当前目录,也就是com文件夹下,输入javac Dlltest.java
指令编译java文件生成Dlltest.class文件,就在com文件夹下。
2
之
后再回到上级目录,就是com文件夹的上一层src目录(cd..命令),执行javah命令生成头文件(头文件DllTest.h就在com的上层文件
夹src中),此处一定注意执行javah命令(javah -classpath . -jni
com.DllTest,注意点两边的空格)的目录,目录错误就会报错(如上图所示)。
END
建立VC++工程,生成dll文件
1
打开Visual Studio 2010,新建项目,选择win32项目
2
下一步,选择,dll项目,勾选空项目,点击完成,一个空的dll项目就建好了。
3
还记得之前java项目中生成的DllTest.h文件吗?它就是Java为C++项目指定的头文件,java生成头文件,c++里只需要将头文件里声明的函数实现就好了。首先把头文件复制到C++项目的目录下并导入到解决方案的头文件目录下。
4
新建一个cpp文件,文件名最好与头文件一致(不一样也可以),在这个cpp文件中我们要实现头文件中的函数,需要注意的是函数头必须跟DllTest.h中的一样,不能出错。加完代码,会发现包含的头文件jni.h和jni_md.h出错了,下一步就来解决它。
5
这
个cpp文件中需要包含两个java安装目录下的头文件:jni.h和jni_md.h,分别位于java安装目录下的include文件夹和
include里的win32文件夹内。找到这两个文件,复制到Visual Studio VC 2010
的头文件包含目录中(我的是MicroSoft Visual Studio
10.0\VC\Include,如图)。当然也可以把头文件之直接复制到当前项目的目录下(记得把代码改为#include
“jni.h”),但是这样每次新建项目都得复制粘贴。
6
复制完之后头文件如果还报错,就检查一下VS的包含目录,确认你把头文件复制到VS的默认包含目录中。属性管理器->Debug->User->通用属性->VC++目录->包含目录(include),添加刚才放置头文件的目录即可。
7
解决了上述问题,就可以尝试编译项目生成dll文件了,在debug或release模式下点击生成解决方案,生成成功后到项目目录的debug或release目录下找到相应的dll文件。
END
在Java中调用c++生成的dll文件
1
生成了dll文件,终于到了最后一步。把生成的dll文件复制到Java项目的目录下,注意不是放在com文件夹,也不是src文件夹,是DllTest文件夹内,跟src同级,否则会报错。
2
还有一点需要注意的是,在Java文件内用LoadLibrary函数调用的库名必须与Dll文件名一致,而不是跟java类名一致,这点可以参考java 部分的代码。确认完上述问题,点击运行,稍等片刻就可以看到运行结果,java&dll之旅到此结束。
⑻ Java里面的jar包是否就相当于c#编译生成的dll文件
dll文件,俗称动态链接库文件,是有执行程序可调用的二进制文件,也就是计算机能识别的二进制代码,任何语言都可以调用。只是方法不同而已。
jar文件,一般是由java虚拟机解析的,其实相当于将一系列的字节码文件(.java文件)或者包,java虚拟机这些文件通过一些算法序列化(压缩),就形成了jar文件。但程序需要执行时java虚拟机将字节码文件再次编译成二进制文件供计算机执行。
PS:这就是java是跨平台的原因。所有程序的字节码文件相同。不同操作系统上只需安装不同的java虚拟机就可以执行相同的程序。
⑼ java编译出来的class 文件能否做成 dll 文件
dll: 动态链接库(dynamic link lib),Java链接windows的库干什么??!如果用dll就不是平台无关了。
想做dll就做c/c++的windows编程吧。
⑽ 请问:Java能编写DLL吗
貌似不能(不是不确切,是我的口头禅)
因为Java编程是跨平台的,它不可能只编写适用了Windows平台的东西。不过它有相应的东西,这个可以适用于Linux等等平台的!