如何从C ++调用Java函数?

时间:2009-05-04 10:03:55

标签: java c++

如何从C ++应用程序调用Java函数?

我知道从CMD(或类似技术)调用它们,但我宁愿不使用它们。

6 个答案:

答案 0 :(得分:21)

例如,选中Creating a JVM from C。它显示了创建JVM并调用方法的示例过程。如果JVM已经存在;例如你的C程序是由Java程序调用的(回调情况),你可以缓存JNIEnv *指针。

作为建议,请注意从C / C ++缓存指向JVM的指针,关于可以缓存的内容涉及一些语义,以后可以调用它。为此,正如Brian Agnew指出的那样,检查JNI参考。

答案 1 :(得分:17)

查看JNI Invocation interface。这将允许您在C(或C ++)应用程序中嵌入JVM。

请注意,存在各种更简单的机制来促进从Java调用C / C ++(例如JNA)。可能值得考虑反转您的问题,以便您可以从 Java调用(我知道这可能不适用于您的特定应用程序)

答案 2 :(得分:3)

此页面很有帮助: http://hildstrom.com/projects/jni/index.html

假设您有一个Java类:

package foo;
public class bar {
    public static int timesTen(int input){
        return input * 10;
    }
}

一旦你有了一个JVM和JNIEnv *(详细信息省略......),你就可以从C ++调用Java方法,如下所示:

jclass myClass = env->FindClass("foo.bar");
jmethodID mid = env->GetStaticMethodID(myClass, "timesTen", "(I)I");
jint hundred = env->CallStaticIntMethod(myClass, mid, (jint)10);

这掩盖了 lot 的详细信息,包括异常处理,如果省略将导致JVM崩溃。对于所有血腥细节搜索“Java Native Interface”并遵循Oracle链接。

答案 3 :(得分:2)

阅读JNI

答案 4 :(得分:1)

答案 5 :(得分:-3)

从CPP调用java方法的另一种简单方法是通过批处理文件。

system() 

是从CPP调用exe或bat文件的方法。将您的类与批处理文件中的java路径和类路径放在一起,并使用system("batch-file-name.bat")从CPP调用该批处理文件。

简单直接。