JNI 中的宏定义

2020-04-14  本文已影响0人  asdf____

一、宏定义

宏定义可以理解为就是定义一个常量或一个函数,实现复用,易于统一维护和修改。

// 不带参数的宏定义
#define MAX 10

// 带参宏定义
#define M(y) y * y + 3 * y

// 宏调用
k = M(5);

二、JNIEXPORTJNICALL

JNIEXPORTJNICALL 实际上是 JNI 中定义的两个宏,它们在 WindowsLinux 分别有不同的定义。

// Windows 系统
#ifndef _JAVASOFT_JNI_MD_H_
#define _JAVASOFT_JNI_MD_H_

#define JNIEXPORT __declspec(dllexport)
#define JNIIMPORT __declspec(dllimport)
#define JNICALL __stdcall

typedef long jint;
typedef __int64 jlong;
typedef signed char jbyte;

#endif /* !_JAVASOFT_JNI_MD_H_ */
// Linux 系统
#define JNIIMPORT
#define JNIEXPORT  __attribute__ ((visibility ("default")))
#define JNICALL
三、JNIEXPORTJNICALL 宏定义作用

四、JNIEXPORTJNICALL 宏替换

// 使用 JNIEXPORT 和 JNICALL 的原始方法
extern "C"
JNIEXPORT void JNICALL Java_bytecode_NativeTest_sayWithMsgAndNum(JNIEnv *jniEnv, jobject obj, jstring msg, jint num) {
    // 函数体
}
// 预编译过程中宏替换后的方法
extern "C"
__declspec(dllexport) void __stdcall Java_bytecode_NativeTest_sayWithMsgAndNum(JNIEnv *jniEnv, jobject obj, jstring msg, jint num) {
    // 函数体
}
// 使用 JNIEXPORT 和 JNICALL 的原始方法
extern "C"
JNIEXPORT void JNICALL Java_bytecode_NativeTest_sayWithMsgAndNum(JNIEnv *jniEnv, jobject obj, jstring msg, jint num) {
    // 函数体
}
// 预编译过程中宏替换后的方法
extern "C"
__attribute__ ((visibility ("default"))) void Java_bytecode_NativeTest_sayWithMsgAndNum(JNIEnv *jniEnv, jobject obj, jstring msg, jint num) {
    // 函数体
}
上一篇 下一篇

猜你喜欢

热点阅读