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++;