簡體   English   中英

java本機接口方法和模塊名稱的命名約定是什么?

[英]What is the naming convention for java native interface method and module name?

我能夠很好地遵循 jni 教程。 但是當我更改方法名稱時,我遇到了麻煩。 是否有我需要遵循的命名約定? 本教程使用 HelloJNI 作為模塊名稱和庫名稱。 我使用了“useaaacom”。

Oracle 的文檔

動態鏈接器根據條目的名稱解析條目。 本機方法名稱由以下組件連接而成:

  • 前綴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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM