您的位置:首页 > 编程语言 > Java开发

语言混编之java调用c dll jni技术小试

2010-01-12 10:46 183 查看
刚从网上看到c和java混编的文章,就亟不可待的尝试了一下。呵呵,效果还是很好的。下面将自己成果粘贴出来

(转载于http://www.zxbc.cn/html/20070518/19986.html)。实验之后可以通过。

1java中调用c语言

首先编写Main.java

public class Main
{
public native static int getStrNum(byte str[], int strLen);
}

在命令行中,使用如下命令编译:

javac Main.java
下面的命令将生成Main.h头文件

javah Main

打开vs2008, 新建工程MakeDll(win32 console application),设置项目属性如下:

在project-》MakeDll Properties-》在General选项卡上,选择生成dll文件。

同时需要在项目的c++下general下的Additional include directory下加载jdk安装目录下的include文件夹和该文件夹下的win32

子目录。

将第一步生成的Main.h文件假如到工程中,同时新建一个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] = ' ';
jint len = strlen((char*)buffer);

return len;
}
编译即可生成MakeDll.dll文件。

在java源文件中调用该dll文件(注意需要将dll文件和编译的class文件放置在同一个文件夹下面)

java源文件代码如下:

public class Main
{
static
{
System.loadLibrary ("MakeDll");
}

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源文件,同时执行该文件。

javac Main.java

java Main

即可输出相应结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: