【发布时间】:2019-01-15 04:37:56
【问题描述】:
情况: 我有一个实现 JNI 的 dll,我想从 Cpp 应用程序调用其中的方法。
当前状态:
据我了解,一个实现了JNI的dll其实和JAVA无关,例如:
在 Test.java 中,我写了
public native int Add(int a,int b);
并用 Cpp In TestDll.Cpp 实现
JNIEXPORT jint JNICALL Java_SomeNamespace_Add(JNIEnv* _Env, jobject _Object, jint a, jint b)
{
return a+b;
}
我认为这样的程序与JVM无关,jint结构似乎已经完全定义在jni.h中。
所以,我想知道是否可以直接调用Java_SomeNamespace_Add 而无需从 Cpp 应用程序创建 VM,如果可以的话:
- 参数列表中的`JNIEnv*`和`jobject`应该是什么?
- 如何将 `jint` 变量转换为标准 `int` 变量?
- 如何在不使用 `_Env->FindClass("Ljava/lang/String;")` 和一堆以下代码的情况下将 `jstring` 变量转换为标准 `string` 变量?
【问题讨论】:
-
1.他们将是空的。 2. jint 和 int32_t 是一回事。 3. jstring不能在没有Java JNI代码的情况下转换为std::string..你可以使用JNI创建一个JVM然后进行转换..
-
@Brandon 我可以只包含 jni.h 并做一些事情然后它神奇地起作用吗?
-
您是否确认您的实际 DLL 没有对
env指针和/或接收器对象或可能的参数对象做任何事情?我认为你不能从你的测试函数中概括这一点。
标签: java c++ java-native-interface jnienv