首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JNI中的"jobject thiz“是什么?它的用途是什么?

JNI中的"jobject thiz“是什么?它的用途是什么?
EN

Stack Overflow用户
提问于 2013-01-21 04:53:45
回答 3查看 8.4K关注 0票数 15

我很难找到这个问题的答案。但是,"jboject thiz“在JNI函数调用中用来做什么呢?例如:

代码语言:javascript
运行
复制
jobjectArray Java_com_gnychis_awmon_Test( JNIEnv* env, jobject thiz ) {

我经常使用env来分配对象,但我从未使用过它,也不确定它是用来做什么的。只是出于知识的目的。

EN

Stack Overflow用户

回答已采纳

发布于 2013-01-29 17:13:16

下面是一个JNI包装器函数,它有两个参数,并返回一个基本的对象数组:

代码语言:javascript
运行
复制
jobjectArray Java_com_gnychis_awmon_Test( JNIEnv* env, jobject thiz );

从你给出的函数名来看,我不认为它是完整的,也就是说,你没有遵守强制性的函数名约定,即:

  1. 使用Java_
  2. 启动函数,并附加由_ (undescores)分隔的包名,即com_company_awesomeapp。到目前为止,函数名由以下部分组成: Java_com_company_awesomeapp
  3. Append定义了本机方法的Java类名,后跟实际的函数名。因此,在这一点上,我们应该有以下函数名:Java_com_company_awesomeapp_MainActivity_Test

第一个参数是指向存储所有JNI函数指针的结构的指针,即#include <jni.h>之后的所有the predefined functions you have available

第二个参数是对Java对象的引用,在该对象中声明了这个本机方法。 You can use it to call the other methods of the Java object来自当前的JNI函数,即从用C或C++编写的JNI代码调用Java实例方法。

例如,如果在MainActivity.java文件中有以下Java类:

代码语言:javascript
运行
复制
public class MainActivity extends Activity
{
    static
    {
        try
        {
            System.loadLibrary("mynativelib");
        }
        catch (UnsatisfiedLinkError ule)
        {
            Log.e(TAG, "WARNING: Could not load native library: " + ule.getMessage());
        }
    }

    public static native Object[] Test();
}

然后,函数的JNI jobject的参数将是对MainActivity类型的对象的引用。

票数 20
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14429213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档