gpt4 book ai didi

java - super 强大的 Android JNI : understanding "JNI(jintArray ..." format

转载 作者:行者123 更新时间:2023-11-30 02:27:39 27 4
gpt4 key购买 nike

Superpowered“Simple USB Example”使用以下代码基于C++ 方法更新Java 端的UI。这是我第一次看到 JNI 后面跟着一个方法。我在类似情况下看到过 JNIEXPORT,但不仅仅是 JNI。我想了解更多关于这种用法的信息,但没有任何运气尝试使用谷歌搜索它。任何解释或引用将不胜感激!

C++ Code :

// This is called by the MainActivity Java object periodically.
JNI(jintArray, getLatestMidiMessage, PID)(JNIEnv *env, jobject __unused obj) {
jintArray ints = env->NewIntArray(4);
jint *i = env->GetIntArrayElements(ints, NULL);
pthread_mutex_lock(&mutex);
i[0] = latestMidiCommand;
i[1] = latestMidiChannel;
i[2] = latestMidiNumber;
i[3] = latestMidiValue;
pthread_mutex_unlock(&mutex);
env->ReleaseIntArrayElements(ints, i, NULL);
return ints;
}

Java code :

 // Update UI every 40 ms.
Runnable runnable = new Runnable() {
@Override
public void run() {
int[] midi = getLatestMidiMessage();
switch (midi[0]) {
case 8: textView.setText(String.format(Locale.ENGLISH, "Note Off, CH %d, %d, %d", midi[1] + 1, midi[2], midi[3])); break;
case 9: textView.setText(String.format(Locale.ENGLISH, "Note On, CH %d, %d, %d", midi[1] + 1, midi[2], midi[3])); break;
case 11: textView.setText(String.format(Locale.ENGLISH, "Control Change, CH %d, %d, %d", midi[1] + 1, midi[2], midi[3])); break;
}
handler.postDelayed(this, 40);
}
};
handler = new Handler();
handler.postDelayed(runnable, 40);
}

最佳答案

看看那个例子中的代码:

// Beautifying the ugly Java-C++ bridge (JNI) with these macros.
#define PID com_superpowered_simpleusb_SuperpoweredUSBAudio // Java package name and class name. Don't forget to update when you copy this code.
#define MAKE_JNI_FUNCTION(r, n, p) extern "C" JNIEXPORT r JNICALL Java_ ## p ## _ ## n
#define JNI(r, n, p) MAKE_JNI_FUNCTION(r, n, p)

他正在使用一些宏观魔法让事情变得“更干净”。实际上,它不那么冗长但更难理解,生产代码永远不应该有这样的东西。

关于java - super 强大的 Android JNI : understanding "JNI(jintArray ..." format,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41467854/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com