Home » programming

Java中调用本地代码

By: Zhiqiang Ma On: Aug 16, 2008 Views: 15 No Comment Print Email
Tags: ,

Java中调用.dll中本地代码方法介绍:

环境:
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

JDK:
C:\Documents and Settings\mzq>java -version
java version “1.6.0_05″
Java(TM) SE Runtime Environment (build 1.6.0_05-b13)
Java HotSpot(TM) Client VM (build 10.0-b19, mixed mode, sharing)

本地代码编译环境:
MS Visual Studio 2008

1) 编写Java代码
示例代码如下:

public class JNITest {
public static void main (String args[]) {
  if (args.length > 0) {
    int x = new Integer(args[0]).intValue();
    int a = new mynative().cubecal(x);
    System.out.println(a);
  }
}
}

class mynative {
public native int cubecal(int x);
static {
  System.loadLibrary("mynative");
}
}

注意mynative类内容即可.

2)生成为本地方法调用的mynative.h头文件

D:\workspace_java\JNI\src>javac JNITest.java

D:\workspace_java\JNI\src>javah -jni mynative

3)编写本地代码
注意:代码扩展名一定要用.c

根据mynative.h编写

#include "jni.h"

int cube(int x) {
return (x*x*x);
}

JNIEXPORT jint JNICALL Java_mynative_cubecal
(JNIEnv *e, jobject o, jint x) {
return cube(x);
}

4)解决依赖关系
将$JAVA_HOME$/include/jni.h $JAVA_HOME$/include/win32/jni_md.h
及mynative.h复制到vs2008 proj目录下

5)编译生成mynative.dll

6)复制mynative.dll到存放Java项目目录中运行即可

D:\workspace_java\JNI\bin 的目录

2008-06-02 14:52 413 mynative.class
2008-06-02 14:52 719 JNITest.class
2008-06-02 15:39 7,168 mynative.dll
3 个文件 8,300 字节
2 个目录 7,816,396,800 可用字节

D:\workspace_java\JNI\bin>java JNITest 9
729

Read more:

Digg del.icio.us Stumble Techorati Facebook Newsvine Reddit Twitter
Mixx LinkedIn Google Bookmark Yahoo Bookmark MySpace LiveJournal Blogger RSS feed

Leave your response!

Add your comment below, or trackback from your own site. You can also subscribe to these comments via RSS.

Be nice. Keep it clean. Stay on topic. No spam.

You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

This is a Gravatar-enabled weblog. To get your own globally-recognized-avatar, please register at Gravatar.