如何实现两个具有相同名称但不同Params的JNI方法?

Morcl174

我有一个Java类,带有两个具有相同名称但参数不同的本机函数。

package com.example;

public class Test {

    static {
        System.loadLibrary("TestLib");
    }

    public static native void doSomething(int a);
    public static native void doSomething(int a, long b);
}

我的头文件看起来像

#include <jni.h>

#ifndef _TEST_LIB_H_
#define _TEST_LIB_H_

#ifdef __cplusplus
extern "C" {
#endif

JNIEXPORT void JNICALL Java_com_example_Test_doSomething
    (JNIEnv *env, jclass clazz, jint a);

JNIEXPORT void JNICALL Java_com_example_Test_doSomething
    (JNIEnv *env, jclass clazz, jint a, jlong b);

#ifdef __cplusplus
}
#endif

#endif //_TEST_LIB_H_

和我的cpp文件

#include "TestLib.h"

JNIEXPORT void JNICALL Java_com_example_Test_doSomething
    (JNIEnv *env, jclass clazz, jint a){
    Java_com_example_Test_doSomething(env, clazz, a, -1);
}

JNIEXPORT void JNICALL Java_com_example_Test_doSomething
    (JNIEnv *env, jclass clazz, jint a, jlong b) {
    // implementation
}

仅具有一个功能就可以使用,但是在添加了第二个具有相同名称和不同参数的功能后,我得到了一个错误:

error: conflicting declaration of C function 'void Java_com_example_Test_doSomething(JNIEnv*, jclass, jint, jlong)'
note: previous declaration 'void Java_com_example_Test_doSomething(JNIEnv*, jclass, jint)'

我正在使用android studio和实验性gradle插件。我究竟做错了什么?

麦可

首先,如果您的本机方法确实将ajclass作为第二个参数,则应static在Java端对其进行声明否则,它们应采用jobject(被调用的实例)而不是jclass


这是Oracle文档有关重载本机方法命名的内容:

本机方法名称由以下组件连接而成:...对于重载的本机方法,两个下划线(“ __”)后跟错误的参数签名

因此,第二个函数的名称应为Java_com_example_Test_doSomething__IJ您可能还必须将第一个函数的名称更改为Java_com_example_Test_doSomething__I

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何实现两个具有相同名称的方法的接口?

来自分类Dev

定义两个具有相同名称但返回类型不同的方法是否合法?

来自分类Dev

如何在不同模块中使用两个具有相同名称的AngularJS服务?

来自分类Dev

具有相同名称和不同模板参数的两个结构如何工作

来自分类Dev

如何在1个变量下打开两个具有相同名称的文件以实现差异功能?

来自分类Dev

Maven:如何在两个不同的模块下放置一个具有相同名称的模块?

来自分类Dev

Delphi,如何在两个不同的程序包中安装具有相同名称的组件

来自分类Dev

如何从两个不同的JS文件中获取具有相同名称的变量的每个值?

来自分类Dev

Java模板,如何使用两个具有相同名称和不同类型的类

来自分类Dev

Java命名空间-不同包中具有相同名称的两个类

来自分类Dev

XSD具有相同名称但属性值不同的两个元素

来自分类Dev

创建两个具有相同名称但参数类型不同的R函数

来自分类Dev

两个不同包装中具有相同名称的实体

来自分类Dev

推断显示两个具有相同名称的不同变量?

来自分类Dev

具有相同名称范围的Excel上的两个不同的从属下拉列表

来自分类Dev

声明两个具有相同名称的变量

来自分类Dev

具有相同名称的两个输入

来自分类Dev

我可以在neo4j中创建和关联两个具有相同名称但不同ID的节点吗

来自分类Dev

两个具有相同名称,相同版本但具有不同公钥的程序集

来自分类Dev

在两个不同的程序包中获得两个具有相同名称的功能的帮助

来自分类Dev

LuaJ从两个不同的LuaScript中加载两个具有相同名称的函数

来自分类Dev

在两个不同的程序包中获得两个具有相同名称的功能的帮助

来自分类Dev

为什么在使用动态类型和动态绑定时,两个具有相同名称(属于不同类)的方法应具有相同的原型?

来自分类Dev

为什么在使用动态类型和动态绑定时,两个具有相同名称(属于不同类)的方法应具有相同的原型?

来自分类Dev

两个组具有相同的名称(但不同的 gid)是否有效?

来自分类Dev

boost:bind和两个具有相同名称和参数的方法计数

来自分类Dev

修复两个具有相同名称的AngularJS指令的最佳方法是什么?

来自分类Dev

如何区分两个具有相同名称的.snk文件?

来自分类Dev

如何比较两个具有相同名称的预处理器宏?

Related 相关文章

  1. 1

    如何实现两个具有相同名称的方法的接口?

  2. 2

    定义两个具有相同名称但返回类型不同的方法是否合法?

  3. 3

    如何在不同模块中使用两个具有相同名称的AngularJS服务?

  4. 4

    具有相同名称和不同模板参数的两个结构如何工作

  5. 5

    如何在1个变量下打开两个具有相同名称的文件以实现差异功能?

  6. 6

    Maven:如何在两个不同的模块下放置一个具有相同名称的模块?

  7. 7

    Delphi,如何在两个不同的程序包中安装具有相同名称的组件

  8. 8

    如何从两个不同的JS文件中获取具有相同名称的变量的每个值?

  9. 9

    Java模板,如何使用两个具有相同名称和不同类型的类

  10. 10

    Java命名空间-不同包中具有相同名称的两个类

  11. 11

    XSD具有相同名称但属性值不同的两个元素

  12. 12

    创建两个具有相同名称但参数类型不同的R函数

  13. 13

    两个不同包装中具有相同名称的实体

  14. 14

    推断显示两个具有相同名称的不同变量?

  15. 15

    具有相同名称范围的Excel上的两个不同的从属下拉列表

  16. 16

    声明两个具有相同名称的变量

  17. 17

    具有相同名称的两个输入

  18. 18

    我可以在neo4j中创建和关联两个具有相同名称但不同ID的节点吗

  19. 19

    两个具有相同名称,相同版本但具有不同公钥的程序集

  20. 20

    在两个不同的程序包中获得两个具有相同名称的功能的帮助

  21. 21

    LuaJ从两个不同的LuaScript中加载两个具有相同名称的函数

  22. 22

    在两个不同的程序包中获得两个具有相同名称的功能的帮助

  23. 23

    为什么在使用动态类型和动态绑定时,两个具有相同名称(属于不同类)的方法应具有相同的原型?

  24. 24

    为什么在使用动态类型和动态绑定时,两个具有相同名称(属于不同类)的方法应具有相同的原型?

  25. 25

    两个组具有相同的名称(但不同的 gid)是否有效?

  26. 26

    boost:bind和两个具有相同名称和参数的方法计数

  27. 27

    修复两个具有相同名称的AngularJS指令的最佳方法是什么?

  28. 28

    如何区分两个具有相同名称的.snk文件?

  29. 29

    如何比较两个具有相同名称的预处理器宏?

热门标签

归档