1.在Java中创建调用接口:
package com.test.server;
public class JniDll {
public native void sayHello();
static
{
System.loadLibrary("hello");
}
public static void main(String[] args)
{
JniDll h = new JniDll();
h.sayHello();
}
}
2.生成C++ 的头文件:
javah -jni com.test.server.JniDll
3.创建win32项目,并将刚才生成的头文件com_test_server_JniDll.h加入工程中,并改名为HelloWorld.h:
4.将HelloWorld.h文件中 的#include <jni.h>改为#include "jni.h";
5.将JDK目录下的include目录的中jni.h和jni_md.h拷贝到工程的根目录中;
6.将HelloWorld.h头文件的声明拷贝到HelloWorld.cpp文件中并实现:
// HelloWorld.cpp : 定义 DLL 应用程序的导出函数。
//
#include "stdafx.h"
JNIEXPORT void JNICALL Java_com_test_server_JniDll_sayHello
(JNIEnv *, jobject)
{
printf("Hello World!!!");
}
7.将dllmain.cpp中的DllMain函数拷贝到HelloWorld.cpp中:
// HelloWorld.cpp : 定义 DLL 应用程序的导出函数。
//
#include "stdafx.h"
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
JNIEXPORT void JNICALL Java_com_test_server_JniDll_sayHello
(JNIEnv *, jobject)
{
printf("Hello World!!!");
}
8.删除dllmain.cpp文件,编译release,将生成的dll文件拷贝到Java项目的根目录下;
9.运行Java代码输出“Hello World!!!”,Java成功调用C++;