getStaticMethodInfo参数详解
2017-08-11 09:01
316 查看
两个接口的参数一样,意义也相同,详解如下:
JniMethodInfo &methodinfo JniMethodInfo对象的引用,函数执行中会把jniEvn、classid、methodid写入到引用中。
const char *className 类的路径,把类的完整包名写全,用法如以上代码。
const char *methodName 函数名。
const char *paramCode 函数类型简写
这个参数需要单独介绍,它的格式为:(参数)返回类型。
例如:无参数,void返回类型函数,其简写为()V
java中的类型对应的简写如下:
参数类型 参数简写
boolean Z
byte B
char C
short S
int I
long J
float F
double D
void V
Object Ljava/lang/String; L用/分割类的完整路径
Array [Ljava/lang/String; [签名 [I
多参数的函数
如果函数有多个参数,直接把简写并列即可。注意Object与Array型参数简写结尾的分号,示例:
IIII //4个int型参数的函数
ILjava/lang/String;I //整形,string类型,整形组合(int x, String a, int y)
http://www.2cto.com/kf/201402/279085.html
1、JniHelper类里getStaticMethodInfo参数详解
getStaticMethodInfo(JniMethodInfo &methodinfo, const char *className, const char *methodName, const char *paramCode)
JniMethodInfo &methodinfo JniMethodInfo对象的引用,函数执行中会把jniEvn、classid、methodid写入到引用中。
const char *className 类的路径,把类的完整包名写全,用法如以上代码。
const char *methodName 函数名,函数名写上就行了。
const char *paramCode 函数类型简写
这个参数需要单独介绍,它的格式为:(参数)返回类型。
例如:无参数,void返回类型函数,其简写为()V
Java中的类型对应的简写如下:
多参数的函数
如果函数有多个参数,直接把简写并列即可。注意Object与Array型参数简写结尾的分号,示例:
IIII //4个int型参数的函数
ILjava/lang/String;I //整形,string类型,整形组合(int x, String a, int y)
通过JNIEnv进行函数调用
JNIEvn有一系列的CallStatic[返回类型]Method、Call[返回类型]Method接口,需要针对不同的函数返回类型选择调用。
[返回类型]以函数返回类型的不同,对应不同的函数名。
例如:
CallStaticVoidMethod ———void
CallVoidMethod ———void
其对应关系如下:
参数传递
调用有参数的java函数时,需要把对应的参数传递进去。需要把参数按顺序加入到classid、methodid后面,并且需要做类型转换。例如:
jint jX = 10;
jint jY = 10;
minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID, jX, jY);
参数类型转换关系如下:
string类型的转换
实际上我们最常用的参数类型,主要是内建的数据类型、string字符串类型。数据类型可以直接转为j类型,但是string类型需要做如下处理:
jstring jmsg = minfo.env->NewStringUTF("http://www.baidu.com");
minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID, jmsg);
非静态函数的调用
非静态函数的调用与静态函数的调用类型,但是需要通过一个静态函数获取java类对象。
示例:
//C++代码
//1. 获取activity静态对象
JniMethodInfo minfo;
bool isHave = JniHelper::getStaticMethodInfo(minfo,
4000
"com/omega/MyApp",
"getJavaActivity",
"()Ljava/lang/Object;");
jobject activityObj;
if (isHave)
{
//调用静态函数getJavaActivity,获取java类对象。
activityObj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);
}
//2. 查找displayWebView接口,获取其函数信息,并用jobj调用
isHave = JniHelper::getMethodInfo(minfo,"com/omega/MyApp","displayWebView", "(IIII)V");
if (!isHave)
{
CCLog("jni:displayWebView 函数不存在");
}
else
{
//调用此函数
jint jX = (int)tlX;
jint jY = (int)tlY;
jint jWidth = (int)webWidth;
jint jHeight = (int)webHeight;
//调用displayWebView函数,并传入参数
minfo.env->CallVoidMethod(activityObj, minfo.methodID, jX, jY, jWidth, jHeight);
}
JniMethodInfo &methodinfo JniMethodInfo对象的引用,函数执行中会把jniEvn、classid、methodid写入到引用中。
const char *className 类的路径,把类的完整包名写全,用法如以上代码。
const char *methodName 函数名。
const char *paramCode 函数类型简写
这个参数需要单独介绍,它的格式为:(参数)返回类型。
例如:无参数,void返回类型函数,其简写为()V
java中的类型对应的简写如下:
参数类型 参数简写
boolean Z
byte B
char C
short S
int I
long J
float F
double D
void V
Object Ljava/lang/String; L用/分割类的完整路径
Array [Ljava/lang/String; [签名 [I
多参数的函数
如果函数有多个参数,直接把简写并列即可。注意Object与Array型参数简写结尾的分号,示例:
IIII //4个int型参数的函数
ILjava/lang/String;I //整形,string类型,整形组合(int x, String a, int y)
http://www.2cto.com/kf/201402/279085.html
1、JniHelper类里getStaticMethodInfo参数详解
getStaticMethodInfo(JniMethodInfo &methodinfo, const char *className, const char *methodName, const char *paramCode)
JniMethodInfo &methodinfo JniMethodInfo对象的引用,函数执行中会把jniEvn、classid、methodid写入到引用中。
const char *className 类的路径,把类的完整包名写全,用法如以上代码。
const char *methodName 函数名,函数名写上就行了。
const char *paramCode 函数类型简写
这个参数需要单独介绍,它的格式为:(参数)返回类型。
例如:无参数,void返回类型函数,其简写为()V
Java中的类型对应的简写如下:
多参数的函数
如果函数有多个参数,直接把简写并列即可。注意Object与Array型参数简写结尾的分号,示例:
IIII //4个int型参数的函数
ILjava/lang/String;I //整形,string类型,整形组合(int x, String a, int y)
通过JNIEnv进行函数调用
JNIEvn有一系列的CallStatic[返回类型]Method、Call[返回类型]Method接口,需要针对不同的函数返回类型选择调用。
[返回类型]以函数返回类型的不同,对应不同的函数名。
例如:
CallStaticVoidMethod ———void
CallVoidMethod ———void
其对应关系如下:
参数传递
调用有参数的java函数时,需要把对应的参数传递进去。需要把参数按顺序加入到classid、methodid后面,并且需要做类型转换。例如:
jint jX = 10;
jint jY = 10;
minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID, jX, jY);
参数类型转换关系如下:
string类型的转换
实际上我们最常用的参数类型,主要是内建的数据类型、string字符串类型。数据类型可以直接转为j类型,但是string类型需要做如下处理:
jstring jmsg = minfo.env->NewStringUTF("http://www.baidu.com");
minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID, jmsg);
非静态函数的调用
非静态函数的调用与静态函数的调用类型,但是需要通过一个静态函数获取java类对象。
示例:
//C++代码
//1. 获取activity静态对象
JniMethodInfo minfo;
bool isHave = JniHelper::getStaticMethodInfo(minfo,
4000
"com/omega/MyApp",
"getJavaActivity",
"()Ljava/lang/Object;");
jobject activityObj;
if (isHave)
{
//调用静态函数getJavaActivity,获取java类对象。
activityObj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);
}
//2. 查找displayWebView接口,获取其函数信息,并用jobj调用
isHave = JniHelper::getMethodInfo(minfo,"com/omega/MyApp","displayWebView", "(IIII)V");
if (!isHave)
{
CCLog("jni:displayWebView 函数不存在");
}
else
{
//调用此函数
jint jX = (int)tlX;
jint jY = (int)tlY;
jint jWidth = (int)webWidth;
jint jHeight = (int)webHeight;
//调用displayWebView函数,并传入参数
minfo.env->CallVoidMethod(activityObj, minfo.methodID, jX, jY, jWidth, jHeight);
}
相关文章推荐
- JniHelper类里 getStaticMethodInfo参数详解
- Android中JniHelper类里 getStaticMethodInfo的使用
- How to call getClass() from a static method in Java?
- 详解get请求和post请求参数中文乱码的解决办法
- java.lang.Class.getDeclaredMethod()方法详解
- laravel引入laterll的alipay支付问题:Non-static method Symfony\Component\HttpFoundation\Request::getQueryStri
- Ubuntu Linux系统下Apt-get命令参数详解
- Android 通知栏 PendingIntent.getActivity(context, requestCode, intent, flags);参数详解
- Ubuntu Linux系统下Apt-get命令参数详解
- Ubuntu Linux系统下Apt-get命令参数详解
- java.lang.Class.getDeclaredMethod()方法详解
- $.ajax()方法所有参数详解;$.get(),$.post(),$.getJSON(),$.ajax()详解
- Ubuntu Linux系统下Apt-get命令参数详解
- volley(2) 参数code : or_barcode, pr_ismsd:false , method:GET
- Ubuntu Linux系统下Apt-get命令参数详解
- Ubuntu Linux系统下apt-get命令参数详解
- [Android JNI开发]JAVA编译器的坑——GetStaticMethodID 找不到的另外一种可能
- java.lang.NoSuchMethodException: getPackageSizeInfo
- 使用 GetAdaptersInfo 或 GetAdaptersAddresses 获取网络相关参数
- Attempt to invoke virtual method 'java.lang.String com.activeandroid.TableInfo.getIdName()' on a nul