(原)不明白JNI指针调用顺序

很不明白JNI里面获取指针的顺序(可能这样描述不太恰当吧)。

下面按照传入指针的顺序的代码一跑就崩溃。如下:

 1 JNIEXPORT jint JNICALL Java_com_example_X_XX_XXX
 2   (JNIEnv * env, jclass, jbyteArray databuf, jint width, jint height, jstring path, jintArray x1)
 3 {
 4     jboolean* pArraydata = (jboolean*)env->GetPrimitiveArrayCritical(databuf, 0);
 5     char* pApath=env->GetStringUTFChars(path,0);
 6     jint* pAx1 = (jint*)env->GetPrimitiveArrayCritical(x1, 0);
 7
 8     // code;
 9
10     env->ReleasePrimitiveArrayCritical(databuf, pArraydata, 0);
11     env->ReleaseStringUTFChars(path, pApath);
12     env->ReleasePrimitiveArrayCritical(x1, pAx1, 0);
13
14     return eyedist;
15 }

之后将获取指针的顺序稍微修改了一下,然后就可以跑过去了。如下:

 1 JNIEXPORT jint JNICALL Java_com_example_X_XX_XXX
 2   (JNIEnv * env, jclass, jbyteArray databuf, jint width, jint height, jstring path, jintArray x1)
 3 {
 4     jboolean* pArraydata = (jboolean*)env->GetPrimitiveArrayCritical(databuf, 0);
 5     jint* pAx1 = (jint*)env->GetPrimitiveArrayCritical(x1, 0);
 6     char* pApath=env->GetStringUTFChars(path,0);
 7
 8     // code;
 9
10     env->ReleasePrimitiveArrayCritical(databuf, pArraydata, 0);
11     env->ReleasePrimitiveArrayCritical(x1, pAx1, 0);
12     env->ReleaseStringUTFChars(path, pApath);
13
14     return eyedist;
15 }
时间: 2024-08-08 11:10:33

(原)不明白JNI指针调用顺序的相关文章

[原]捉虫记3:_ConectionPtr指针调用open失败

背景 产品使用MySQL来存储报警服务产生的报警.在报警服务的组件中使用ADO接口 客户方有两台计算机,一台计算机A用来组态,且可以对设备进行调试,操作系统是Win7 64bit 专业版,安装了VS2010:另一台计算机B用作验收后生产环境中使用,操作系统是Win 2008 R2 标准版 我个人在公司的工作机的操作环境是win10 64bit 企业版 问题 在客户公司时,组态.开发.调试都是在计算机A上进行的,运行也是在计算机A上.一切都很正常.当调试完后,就从现场回到杭州,可是后续又出现了一些

cocos2d-x中使用JNI的调用JAVA方法

用cocos2d-x公布Android项目时.都应该知道要用JAVA与C/C++进行交互时会涉及到JNI的操作(Java Native Interface).JNI是JAVA的一个通用接口.旨在本地化语言(如C\C++)与JAVA语言进行交互.在交互过程成中,JAVA调用的是已编译好的本地化语言的二进制代码(如Windows下的dll.Linux下的so文件).所以在交叉编译时看到Eclipse的控制台输出 [armeabi] SharedLibrary  : libcocos2dcpp.so

Java类的调用顺序决定的单例模式

学习Java有一年多,很多基础知识是了解的,有些知道怎么用,但不明白,它是怎么来的. 经常在书上看到介绍类里面的构造方法,静态方法,普通方法与静态变量,调用顺序,但不明白它的真正用处. 今天走进公司时,我突然间,想到了Java的类中,方法,变量的调用顺序重要吗,我一下就想到了单例模式,因为我之前只是知道单例模式的用处,但不明白它怎么来的,单例模式不就是根据类的启动顺序写出来,因为类会先调用static,然后,再是构造函数,可见有些知识点,你只要灵活一点,就大有用处,当然不知,大家认为我的观点对不

Runtime(运行时)002-方法欺骗(面向切面编程: 修改原来方法的调用顺序)

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #ff2600; background-color: #ffffff } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #919191; background-color: #ffffff } p.p3 { margin:

python 多个装饰器的调用顺序

python 多个装饰器的调用顺序 一般情况下,在函数中可以使用一个装饰器,但是有时也会有两个或两个以上的装饰器.多个装饰器装饰的顺序是从里到外(就近原则),而调用的顺序是从外到里(就远原则). 原代码 执行结果 装饰顺序 : 就近原则 被装饰的函数,组装装饰器时,是从下往上装饰 执行顺序 : 就远原则 装饰器调用时是从上往下调用 为了更好的理解,找到这段话: 被装饰的函数是一个妹子,装饰器是衣服."办事情"的时候得依次把外套.衬衣.内衣脱掉,事情办完了还要依次把内衣.衬衣.外套穿上.

async 与 await 线程调用顺序

用async做一个多线程下载并在datagridview中即时更新,运行时在达到4个线程同时下载时界面卡顿,多次尝试后是不知道async与await线程调用顺序造成. 进入async方法后在调用await之前代码都在主线程(调用线程)中运行,调用await时及之后的async方法代码将另起线程运行该部分代码,而主线程在遇到await后回到主线程继续执行async后的代码. 将async方法通过声明委托后用begininvoke调用后解决.

讨论printf和cout的参数调用顺序

这里纠正在网络上看到的几个错误,以下给出正确的观点: (1)printf和cout都是有缓冲机制的.(有人认为printf是没有缓冲区的) (2)printf和cout函数对参数的调用顺序在c/c++中是未定义的.(有人认为它们读入的顺序是由右向左,输出顺序是由左到右,类似于栈) 基于以上错误的认识,看下列程序,有人会得到错误的输出的结果. #include <stdio.h> #include <iostream> using namespace std; int main()

c++学习笔记5,多重继承中派生类的构造函数与析构函数的调用顺序(二)

现在来测试一下在多重继承,虚继承,MI继承中虚继承中构造函数的调用情况. 先来测试一些普通的多重继承.其实这个是显而易见的. 测试代码: //测试多重继承中派生类的构造函数的调用顺序何时调用 //Fedora20 gcc version=4.8.2 #include <iostream> using namespace std; class base { public: base() { cout<<"base created!"<<endl; }

Activity生命周期方法的调用顺序工程与测试日志

下面为测试activity的方法的执行顺序   工程与测试资源地址 android工程 AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.finalizetest"