从调用C ++方法Java函数 [英] Call Java function from C++ method

查看:125
本文介绍了从调用C ++方法Java函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我现在面临的麻烦调用从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函数++

这篇关于从调用C ++方法Java函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆