JNI方法签名规则

转自:http://book.51cto.com/art/201305/395888.htm

2.4.3 JNI方法签名规则

有了数据类型之间的对应关系,JNI就可以正确识别并转换Java类型。那JNI又是如何识别Java的方法呢?

Java支持方法重载,仅靠函数名是无法唯一确定一个方法的。于是JNI提供了一套签名规则,用一个字符串来唯一确定一个方法。其规则如下:

(参数1类型签名参数2类型签名……参数n类型签名)返回值类型签名

以上签名字符串之间均没有空格。

类型签名又有一些规则,如表2-3所示。

表2-3 JNI类型签名规则


(续)


注意 类的签名规则是:“L+全限定类名+;” 三部分组成,其中全限定类名以”/”分隔,而不是用“.”或者“_”分隔。

例如,Java 方法:

 
 
  1. long fun (int n, String str, int[] arr); 

其方法签名:

 
 
  1. (ILjava/lang/String;[I)J 

括号里面的内容分成三部分,之间没有空格,即“I”、“Ljava/lang/String;”和“[I”,分别代表 int、String和int[]。括号外面是返回值类型签名,J代表long型。

回到Log系统的例子,JNINativeMethod结构体中第二个元素便是方法签名信息, 代码如下:

 
 
  1. static JNINativeMethod gMethods[] = {  
  2.    { "isLoggable", "(Ljava/lang/String;I)Z",(void*)  
  3.   android_util_Log_isLoggable },  
  4.    { "println_native","(IILjava/lang/String;Ljava/lang/String;)I",(void*)  
  5.  
  6.   android_util_Log_println_native },  
  7. };  

可以看出isLoggable函数有两个参数,一个是String类型,另一个是int类型,返回值为boolean类型。

至此,我们已经可以正确识别类型信息和函数信息。可如何操作对象并访问它们的成员变量和方法呢?下一节继续介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值