草庐IT

JNI_ASSERT

全部标签

c++ - 使用 static_assert 确定特定模板参数是否为特定无类型类模板

我想要一个将参数限制为仅派生自特定模板类的类型的函数。在这种情况下,basic_string(来自STL-docs)。例如,声明了一个wstring:typedefbasic_string,allocator>wstring;基本思路是这样的:templatevoidstrings_only_please(TStringmessage){static_assert(is_base_of::value,"Notastringtype!");}当然,虽然没有指定basic_string,但它无法编译……它需要一个真实的类型。(虽然我可能只对少数实际字符串类型进行硬编码,但我正在寻找针对此模

java - JNI FindClass 找不到使用 jar 的类

我正在开发一个项目,其中一些Java函数必须使用JNI从C++代码中调用。我已经尝试使用一个简单的Java类,但是当我开始在我的Java项目中使用额外的.jar时,JNI的FindClass函数找不到我的类。我做了一些研究并阅读了有关classpath的内容,如果它使用额外的库,编译.java文件需要它,但是FindClass返回null那种情况。这是我的代码的基本结构JavaVMOptionoptions[2];JNIEnv*env;JavaVM*jvm;JavaVMInitArgsvm_args;longstatus;jclasscls;jmethodIDmid;jintsquar

java - 如何在 JNI 中访问从 C++ 返回 java.lang.String 的 Java 方法的返回值?

我正在尝试从C++调用的Java方法传回一个字符串。我无法找出应该调用什么JNI函数来访问该方法并返回一个jstring值。我的代码如下:C++部分main(){jclasscls;jmethodIDmid;jstringrv;/**...omittedcode...*/cls=env->FindClass("ClassifierWrapper");mid=env->GetMethodID(cls,"getString","()Ljava/lang/String");rv=env->CallStaticMethod(cls,mid,0);constchar*strReturn=env-

c++ - Assert错误,用cout证明

当我运行它时,在main()中,cout打印5.395。但是断言说它失败了!!这真是令人难以置信,为什么会这样?#include#includeusingnamespacestd;constfloatA=1.6;constfloatC=1.55;constfloatG=2.2;constfloatT=1.23;charempty[18];intarraySize;voidcopyArray(charsourceArray[],chartargetArray[],intsize){for(inti=0;i编辑:感谢所有的回答,我只是乘以1000,转换为int,转换回double,然后除以

c++ - 我如何对类型进行 static_assert?

灵感来自thisquestion上的评论之一我想在我的代码中写这个,因为我可能做出了错误的假设,如果我将代码移植到两种类型不同的平台,就需要调查。static_assert(typeid(float)==typeid(GLfloat),"GLfloatisunexpectedtype");然而,这并没有编译,因为错误:调用非constexpr函数‘boolstd::type_info::operator==(conststd::type_info&)const’不过我可以这样写:-static_assert(sizeof(float)==sizeof(GLfloat),"GLfloat

c++ - ASSERT 是多余的吗?

ASSERT(pointer);pointer->x;在这段代码中,ASSERT似乎是多余的。如果指针为NULL,pointer->x无论如何都会失败。我的论点正确吗? 最佳答案 断言的重要(如果不是主要的话)目的是记录应该在代码中的特定点保持的不变量。如果不变量被破坏,assert也可以中止程序这一事实只是锦上添花,尽管它非常有用。我想说的是,在一个典型的程序中,90%的断言都是显然不会失败并且永远不会失败的断言。也就是说,assert在很大程度上是一种形式化的注释语言。从某种意义上说,这些“注释”是用相同的语言编写的,其余代码是

java - 使用 JNI 加载另一个 JNI 库?

我需要实现一个本地方法,比方说“publicnativevoidsomeFunc();”。我有两个库,libabc.so和libdef.so。Java使用System.loadLibrary();加载libabc.so(它没有实现该方法),但JNI实现在libdef.so中。目前,我正在libabc.so中执行以下操作。JNIEXPORTjintJNICALLJNI_OnLoad(JavaVM*jvm,void*reserved){JNIEnv*env;jclasscls;jmethodIDget_load_id;jstringname;jvm->GetEnv((void**)&env

java - JNI 将空参数传递给 Java 方法

编辑我终于发现问题是由null值毕竟不是null引起的,因为其中一个构造函数没有将值初始化为零。有了这些知识,我想将我的问题改写为以下内容:如果参数应该为null,通过JNI将NULL/0/nullptr传递给Java方法是否安全?到目前为止,我找到的来源给出了不同的结果——其中一些人说在使用JNI时,C语言中的NULL和Java中的null是一回事。有些,例如remudada的回答中链接的那个,表明它可能不完全正确。老问题在使用JNI时是否可以使用空参数调用Java方法?我试过传递null(0、NULL或nullptr),但这会导致段错误。我也尝试过使用null参数的NewGloba

java - 无法使用JNI从java调用C++的成员函数

我按照以下链接中给出的说明进行操作CallcfunctionfromJava之后我就可以调用C++函数了。但是现在我想从Java调用C++类的成员函数。为了清楚地描述它,我引用了下面的场景。java。有一个类叫做HelloWorld.java它有一个名为print()的原生函数现在使用Java的JNI我创建了HelloWorld的等效头文件。之后我写了实现HelloWorld.cpp中的这个头文件现在我想从“HelloWorld.cpp”调用“rectangle.cpp”的成员函数我创建了“矩形”对象,并且调用了它对应的函数。但是在编译代码时它给了我一个错误称为“未解析的外部符号”。在

c++ - 使用 JNI 调用 API 创建 java7 JVM

我们在Java7中有一个类,需要从native代码加载它。我已经将java6与JNI一起使用,但java6无法加载该类。所以我安装了新的JDK,更改了我的VC项目中的包含目录和链接引用等。一切都很好,直到我想从JNI启动jre7:JNI_CreateJavaVM采用vm_args.version参数中的java版本,但没有定义高于1.6的版本。JavaVMInitArgsvm_args;...vm_args.version=JNI_VERSION_1_6;vm_args.nOptions=2;vm_args.options=options;vm_args.ignoreUnrecogni