福利:NDK开发中常用宏

原创
2018/11/19 16:22
阅读数 494
#define FREE_LOCAL_REF(ENV, O) do{\
                                    if(O)\
                                    { \
                                        (*ENV)->DeleteLocalRef(ENV, O);\
                                        O=NULL;\
                                    }\
                                }while(0)

#define CHECK_RETURN_NULL(O) do{\
                                    if(!O)\
                                    {\
                                        return NULL;\
                                    }\
                                }while(0)

#define FREE_ALLOC(O) do{\
                            if(O != NULL)\
                            {\
                                free(O);\
                                O = NULL;\
                            }\
                        }while(0)

#define RELEASE_BYTE_ARRAY(e, a, m) do{\
                                        if(a != NULL){\
                                            jbyte* elements = (*e)->GetByteArrayElements(e, a, 0);\
                                            if(elements){\
                                                (*e)->ReleaseByteArrayElements(e, a, elements, m);\
                                            }\
                                            FREE_LOCAL_REF(e, a);\
                                        }\
                                    }while(0)
#define FIND_CLASS(env, n) (*env)->FindClass(env, n)
#define NEW_OBJECT(env, c, m, ...) (*env)->NewObject(env, c, m, ##__VA_ARGS__)
#define GET_METHOD_ID(env, c, n, t) (*env)->GetMethodID(env, c, n, t)
#define GET_STATIC_METHOD_ID(env, c, n, t) (*env)->GetStaticMethodID(env, c, n, t)
#define CALL_METHOD(env, type, o, methodId, ...) (*env)->Call##type##Method(env, o, methodId,  ##__VA_ARGS__)
#define CALL_VOID_METHOD(env, o, methodId, ...) CALL_METHOD(env, Void, o, methodId, ##__VA_ARGS__)
#define CALL_INT_METHOD(env, o, methodId, ...) CALL_METHOD(env, Int, o, methodId, ##__VA_ARGS__)
#define CALL_OBJECT_METHOD(env, o, methodId, ...) CALL_METHOD(env, Object, o, methodId, ##__VA_ARGS__)
#define CALL_BOOLEAN_METHOD(env, o, methodId, ...) CALL_METHOD(env, Boolean, o, methodId, ##__VA_ARGS__)
#define CALL_STATIC_METHOD(env, type, clz, methodId, ...) (*env)->CallStatic##type##Method(env, clz, methodId, ##__VA_ARGS__)
#define CALL_STATIC_OBJECT_METHOD(env, clz, methodId, ...) CALL_STATIC_METHOD(env, Object, clz, methodId, ##__VA_ARGS__)
#define CALL_STATIC_BOOLEAN_METHOD(env, clz, methodId, ...) CALL_STATIC_METHOD(env, Boolean, clz, methodId, ##__VA_ARGS__)
#define GET_OBJECT_CLASS(env, o) (*env)->GetObjectClass(env, o)
#define GET_FIELD_ID(env, c, n, t) (*env)->GetFieldID(env, c, n, t)
#define GET_OBJECT_FIELD(env, type, o, id) (*env)->Get##type##Field(env, o, id)
#define NEW_STRING_UTF(env, source) (*env)->NewStringUTF(env, source)
#define GET_STRING_UTF_CHARS(env, jstring) (*env)->GetStringUTFChars(env, jstring, 0)

#define LOGD(TAG, ...) __android_log_print(ANDROID_LOG_DEBUG,TAG ,__VA_ARGS__) 
#define LOGI(TAG, ...) __android_log_print(ANDROID_LOG_INFO,TAG ,__VA_ARGS__) 
#define LOGW(TAG, ...) __android_log_print(ANDROID_LOG_WARN,TAG ,__VA_ARGS__) 
#define LOGE(TAG, ...) __android_log_print(ANDROID_LOG_ERROR,TAG ,__VA_ARGS__)
#define LOGF(TAG, ...) __android_log_print(ANDROID_LOG_FATAL,TAG ,__VA_ARGS__) 
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部