草庐IT

JNI_ASSERT

全部标签

assert.h 中的 C++ 断言实现

00001/*assert.h00002Copyright(C)2001,2003FreeSoftwareFoundation,Inc.00003WrittenbyStephaneCarrez(stcarrez@nerim.fr)0000400005Thisfileisfreesoftware;youcanredistributeitand/ormodifyit00006underthetermsoftheGNUGeneralPublicLicenseaspublishedbythe00007FreeSoftwareFoundation;eitherversion2,or(atyour

c++ - 内联函数上的 static_assert 给出错误

考虑以下情况typedefvoid(*foo)();templatestructbar{static_assert(f!=nullptr,"f==null!");};voidbaz(){}inlinevoidbax(){}barok;barbad;//error:non-constantconditionforstaticassertionbaz和bax都被接受为模板参数。它表明两者都被接受为常数。然而,在static_assert他们似乎是不同的(至少在gcc4.9中)-bax不再是一个常数。我的假设是static_assert和模板评估常数相同。例如。任何一个错误都应该是'bax不

java - 使用 JNI 从 native 方法返回 null

我有一些native代码返回一个jbyteArray(Java端是byte[]),我想返回null。但是,如果我只是返回0来代替jbyteArray,我会遇到问题。更多信息:主要逻辑在Java中,native方法用于将一些数据编码成字节流。不要问..它必须这样做。最近,必须对native代码进行一些更改,现在它的运行速度非常慢。经过一些实验,包括在返回之前注释掉native方法中的所有代码,结果证明返回0会导致速度变慢。当返回一个实际的jbyteArray时,一切都很好。我的代码的方法签名:在C++方面:extern"C"JNIEXPORTjbyteArrayJNICALLJava_c

java - 通过 JNI 接口(interface)共享输出流

我正在编写一个通过JNI接口(interface)使用C++库的Java应用程序。C++库创建类型为Foo的对象,这些对象通过JNI适本地传递给Java。假设库有一个输出函数voidFoo::print(std::ostream&os)我有一个JavaOutputStream输出。如何从Java调用Foo::print以便输出出现在out上?有没有办法将OutputStream强制为JNI层中的std::ostream?我可以在JNI层的缓冲区中捕获输出,然后将其复制到out中吗? 最佳答案 在通过JNI将这些写入刷新到javaOu

java - JNI 对象创建和内存管理

我有以下JNI方法,它在本地创建Java对象的集合,然后将它们返回给Java:JNIEXPORTjobjectJNICALLJava_com_test_myClass_myMethod(JNIEnv*env,jclassklass){jclassarrayClass=env->FindClass("java/util/ArrayList");jmethodIDinitMethod=env->GetMethodID(arrayClass,"","()V");jmethodIDaddMethod=env->GetMethodID(arrayClass,"add","(Ljava/lang/

c++ - constexpr、static_assert 和内联

我之前询问过functionoverloadingbasedonwhethertheargumentsareconstexpr.我正在尝试解决该问题的令人失望的答案,以制作更智能的断言功能。这大致就是我想要做的:inlinevoidsmart_assert(boolcondition){if(is_constexpr(condition))static_assert(condition,"Error!!!");elseassert(condition);}基本上,如果可以在编译时进行检查,那么编译时检查总是比运行时检查要好。但是,由于内联和常量折叠之类的原因,我不能总是知道是否可以进行

java - JNI 错误 : Local reference table overflow 512 entries

我的函数如下所示。它被执行了很多次。在某些时候它在jobjectnvarObject=env->GetObjectField(var1,nvar1)崩溃,给出错误JNI错误:本地引用表溢出512个条目。任何人都可以研究这个问题并提出一些启示。 最佳答案 所有返回jobject或类似对象引用的JNI方法都在引用表中创建本地引用。当您将控制权交还给JVM时,这些引用会自动清理,但如果您要创建许多引用(例如,在循环中),则需要手动清理它们。您在cls引用上调用DeleteLocalRef是正确的,但请注意GetObjectField也返回

java - 通过 JNI 将 C++ 类返回给 Java

我目前在一个项目中同时使用C++和Java,我希望能够将C++中包含的对象发送到我的Java接口(interface),以便通过GUI对其进行修改,然后将修改发送回在C++中。到目前为止,我一直在通过JNI接口(interface)向Java返回任何内容、int或boolean值。这次我必须通过接口(interface)发送一个对象。我在C++和Java中都提供了类似的类定义。我想知道如何创建对象以便在Java中使用它。在C++中我有:JNIEXPORTMyObjectJNICALLJava_ca_X_Y_Z_C_1getMyObject(JNIEnv*env,jclass,jintn

java - 安卓工作室;未找到 jni.h

我正在尝试使用他们网站上的教程在Windows上使用AndroidStudio构建GStreamer应用,但是,正如其他问题中已经提到的,这些教程不是最新的,似乎也不适用于AndroidStudio。我遵循了EduardoFernando提出的教程:GstreamerexamplesinAndroidStudio,但它不会构建,因为我无法解决找不到jni.h文件的问题。>Buildcommandfailed.ErrorwhileexecutingprocessC:\Users\spomerleau\AppData\Local\Android\Sdk\ndk-bundle\ndk-bui

java - 使用 JNI 时如何在 C++ 中获取 Java 异常的描述?

我想确定在使用JNI从C++代码调用该函数时Java函数引发了什么异常。我有以下代码可以捕获Java异常:JNIEnv*pEnv;//assumethisisproperlyinitializedjclassjavaClass;//dittojmethodIDjavaFunction;//dittopEnv->CallStaticVoidMethod(javaClass,javaFunction);jthrowableexc;if(exc=pEnv->ExceptionOccurred()){pEnv->ExceptionClear();}我不知道如何在此C++代码中获取有关Java异