从调用C ++方法Java函数 [英] Call Java function from C++ method
问题描述
我现在面临的麻烦调用从C ++方法的Java函数。下面是我在做什么。
I am facing trouble calling a Java function from C++ method. The following is what I am doing
我的Java类
package com.q.IT;
public class Carv {
public boolean isValidRatio(float a, float b)
{
//do something
return True;
}
}
我的C ++方法
My C++ method
void printAndValidateResults() {
JNIEnv *env;
jclass ItClass =env->FindClass("com/q/IT/Carv");
jobject object = env->AllocObject(ItClass);
jmethodID isValidRatioID = env->GetMethodID(ItClass,"isValidRatio", "(FF)Z");
bool retVal = env->CallBooleanMethod(object, isValidRatioID, 1.0f,2.0f);
}
我收到以下错误
06-23 23:35:03.459: A/libc(15758): Fatal signal 11 (SIGSEGV) at 0xe92d43a4 (code=1), thread 16113 (AsyncTask #2)
正如你所看到的,C ++的方法是一个普通的C ++方法,而不是像
As you can see, the C++ method is a normal C++ method and not something like
JNIEXPORT无效JNICALL
Java_com_q_IT_blahblah(JNIEnv的*,jobject)
{
,我想保持这种方式。这次事故发生在这里。
, I'd like to keep it that way. The crash happens here
jclass ItClass =env->FindClass("com/q/IT/Carv");
我不太知道该怎么初始化* ENV来。
I am not quite sure what to initialize *env to.
推荐答案
作为一个例子,检查的创建从C 一个JVM。它显示了一个示例程序创建一个JVM,并调用一个方法。如果JVM已经存在;例如C程序是由Java程序(回调的情况),您可以缓存的JNIEnv *指针调用。
As an example, check Creating a JVM from C. It shows a sample procedure to create a JVM and invoke a method. If the JVM already exists; e.g. your C program is invoked by the Java program (callback situation), you can cache the JNIEnv* pointer.
作为一个建议,要小心缓存指针JVM对C / C ++,有参与,以什么可以缓存,它可在以后调用一些语义。
As an advice, be careful caching pointers to the JVM from C/C++, there are some semantics involved as to what you can cache and it could be invoked later on.
这篇关于从调用C ++方法Java函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!