Java_本地方法_Java程序中调用c函数

Java编程语言使用关键字native表示本地方法,关键字native提醒编译器该方法将在外部定义。当然,本地方法不包含Java编程语言的代码,而且方法标题后直接跟着一个表示终结的分号。因此,本地方法声明看上去和抽象方法声明类似。
例:

package test;

public class HelloNative {
    public static native void greeting();
}

在这个特定示例中,本地方法也被声明为static。本地方法既可以是静态的也可以是非静态的,我们使用静态方法是因为我们目前还不需要处理参数传递。
你可以首先编译这个类。我们在java文件目录下编译这个类生成class文件。
在此有个小技巧(在win7及以上操作系统中,在空白处按住shift再按鼠标右键,在此处打开命令窗口),如图:

Java_本地方法_Java程序中调用c函数_第1张图片

再使用javac命令,如图:

Java_本地方法_Java程序中调用c函数_第2张图片

然后得到class文件。
注意:要使用javah就要先退到包所在文件夹所在的目录,即如图:

Java_本地方法_Java程序中调用c函数_第3张图片

然后在此处打开命令窗口:

Java_本地方法_Java程序中调用c函数_第4张图片

然后得到头文件。

然后在%JAVA_HOME%/include/下找到 jni.h,在%JAVA_HOME%/include/win32/下找到jni_md.h,复制到“Visual Studio目录/VC/include/”下。

然后在VS2013中建立win32项目,选择dll,编写源.c:

#include "test_HelloNative.h"
#include 

JNIEXPORT void JNICALL Java_test_HelloNative_greeting(JNIEnv *env, jclass cl)
{
    printf("Hello Native World!\n");
}

然后生成dll,然后将该dll复制到java.library.path中,然后编写HelloNativeTest:

package test;

public class HelloNativeTest {
    public static void main(String[] args) {
        HelloNative.greeting();
    }
    static
    {
        System.loadLibrary("DllTest");
    }
}

使用静态初始化代码块是使虚拟机在第一次使用该类之前就会装载这个dll库。
编译运行HelloNativeTest,控制台输出:

Hello Native World!

你可能感兴趣的:(dll,本地方法,c,javah,方法)