简体   繁体   English

如何使用JNI创建本机类?

[英]How to create native class using JNI?

I want to create C++ class with constructor and one method which returns string. 我想用构造函数和一个返回字符串的方法创建C ++类。 My question is: how to initialize object of type "native class" in Java using C++ constructor and then from this Java object call native method? 我的问题是:如何使用C ++构造函数初始化Java中“本机类”类型的对象,然后从此Java对象调用本机方法?

There is no 'native class' in Java; Java中没有“本地类”。 we have 'native methods' that can be part of any Java class. 我们拥有可以作为任何Java类的一部分的“本机方法”。 The native methods are implemented as extern "C" functions. 本机方法实现为extern "C"函数。

In the nutshell, you can create in your Java two native methods, eg createNativeInstance and getNativeString . 简而言之,您可以在Java中创建两个本机方法,例如createNativeInstancegetNativeString Note that you probably need another method to release the native instance: 请注意,您可能需要另一种方法来释放本机实例:

#include <jni.h>

JNIEXPORT
jlong Java_test_createNativeInstance(JNIEnv *, jobject ) {
    return reinterpret_cast<jlong>(new CppClass());
}

JNIEXPORT
jstring Java_test_getNativeString(JNIEnv *env, jobject obj, jlong cppClassPtr) {
    CppClass* pCppClass = reinterpret_cast<CppClass*>(cppClassPtr);
    return env->NewStringUTF(env, pCppClass->getString();
}

JNIEXPORT
void Java_test_releaseNativeInstance(JNIEnv *env, jobject obj, jlong cppClassPtr) {
    CppClass* pCppClass = reinterpret_cast<CppClass*>(cppClassPtr);
    delete pCppClass;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM