[英]What is the naming convention for java native interface method and module name?
我能夠很好地遵循 jni 教程。 但是當我更改方法名稱時,我遇到了麻煩。 是否有我需要遵循的命名約定? 本教程使用 HelloJNI 作為模塊名稱和庫名稱。 我使用了“useaaacom”。
動態鏈接器根據條目的名稱解析條目。 本機方法名稱由以下組件連接而成:
- 前綴
Java_
- 錯誤的完全限定類名
- 下划線 (
_
) 分隔符- 錯誤的方法名稱
- 對於重載的本機方法,兩個下划線 (
__
) 后跟重整參數簽名
所以如果你有以下幾點:
package com.foo.bar;
class Baz {
public native void Grill(int i);
}
那么對應的C函數應該是:
JNIEXPORT void JNICALL Java_com_foo_bar_Baz_Grill(JNIEnv *env, jobject thiz, jint i);
如果 Java 方法名稱中有下划線:
public native void A_Grill(int i);
那么 C 函數將是:
JNIEXPORT void JNICALL Java_com_foo_bar_Baz_A_1Grill(JNIEnv *env, jobject thiz, jint i);
_1
轉義序列與A_Grill
中的_
匹配。
根據語言規則,您可以在 Java 級別隨意調用您的包、類和方法,但要遵守語言規則,但 C 級別的命名約定完全由javah
工具的輸出定義。
您可以根據文件名規則和“System.load()/loadLibrary()”規則調用任何您喜歡的共享庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.