一、如何使用
1. 新建Java类
package com.test;
public class Test {
public static native String hello(String str);
static {
System.loadLibrary("Test");
}
}
2. 编译Java程序,生成.class文件
javac Test.java
3. 生成.h文件,运行目录要在com的上一级
javah com.test.Test
4. 创建C++工程,引用生成的.h文件,实现hello函数
JNIEXPORT jstring JNICALL Java_com_oblicore_jni_TestJni_hello(JNIEnv * env, jobject obj, jstring str)
函数的命名规则为Java_<class fully qualifiedname>_<methodname>前两个参数是必须的
5. 生成的DLL必须和第一步中指定的名字一样,即Test.dll
6. DLL可以放在Java程序同目录下,也可通过java.library.path参数传入,或者放在path环境变量包含的目录中
二、如何转换字符串
1. jstring to std string
const jchar* raw = env->GetStringChars(str, NULL);
if (raw != NULL) {
jsize len = env->GetStringLength(str);
stdString.assign((wchar_t*)raw, len);
env->ReleaseStringChars(str, raw);
}
jstring str = env->NewString((const jchar*)stdString.c_str(), (jsize)stdString.length());三、如何处理异常
jclass Exception = env->FindClass("java/lang/Exception");
env->ThrowNew(Exception, "Error occurred");
本文详细介绍了如何在Java中调用Native方法,包括新建Java类声明native方法、使用javah生成头文件、创建C++工程实现方法、处理字符串转换以及异常处理。遵循Java_com_test_Test_hello的命名规则,确保DLL与指定名字一致,并了解如何设置库路径。

被折叠的 条评论
为什么被折叠?



