首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jni正确检查哪些函数返回值?

jni正确检查哪些函数返回值?
EN

Stack Overflow用户
提问于 2015-01-14 22:28:55
回答 1查看 46关注 0票数 0

我正确地使用JNI做了我想做的事情(至少它可以工作!;) )然而,在开发时我使用了一堆断言(只是为了确保每一步都是正确的)

现在我正在实际工作,应该检查哪些返回值,而我可以假设哪些返回值是合理的,而不需要检查

下面是我的一些jni调用使用的一些支持代码

代码语言:javascript
复制
// given a jni env and NVGpaint this creates a java object
// encapsulating the NVGpaint structure (nvg.Paint)
jobject createPaintJobject(JNIEnv *e, NVGpaint p) 
{
    jclass cls = (*e)->FindClass(e, "nvg$Paint");
    assert(cls != NULL);
    jmethodID constructor = (*e)->GetMethodID(e, cls, "<init>", "()V");
    assert(constructor != NULL);

    jobject nvgpaint = (*e)->NewObject(e, cls, constructor);
    assert(nvgpaint!=NULL);

    jfieldID fid = (*e)->GetFieldID(e, cls,"buff","Ljava/nio/FloatBuffer;");
    assert(fid != NULL);
    jobject jbuff = (*e)->GetObjectField(e, nvgpaint, fid);
    assert(jbuff != NULL);
    NVGpaint* ptr = (void*)(*e)->GetDirectBufferAddress(e, jbuff);
    assert(ptr!=NULL);
    *ptr = p;
    return nvgpaint;
}

替换这些断言的最佳实践是什么?其中一些断言甚至需要检查吗?

EN

回答 1

Stack Overflow用户

发布于 2015-01-19 10:07:30

替换这些断言的最佳实践是什么?

通过使用异常检查机制,可能比这些断言更好。

代码语言:javascript
复制
    env->ExceptionCheck();
    env->ExceptionClear();
    env->ExceptionDescribe();
    env->ExceptionOccurred();

实际上,在调用那些可能引发异常的JNI函数时,应该始终进行异常检查。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27945271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档