クラスにクラスが存在する場合のJNI関数名

MethodNameJNI関数は次のようになります。

JNIEXPORT void JNICALL Java_ClassName_MethodName(JNIEnv *env, jobject obj)
{
     //...
}

Java側のコードは次のとおりです:

public class ClassName
{
    private class ClassName2
    {
        MethodName();
    }
}

私は、ネイティブ関数の名前を書く方法を知らない、任意の組み合わせがリンクエラーになります:

JNIEXPORT void JNICALL Java_ClassName_ClassName2_MethodName(JNIEnv *env, jobject obj);

JNIEXPORT void JNICALL Java_ClassName2_MethodName(JNIEnv *env, jobject obj);

JNIEXPORT void JNICALL Java_ClassName_MethodName(JNIEnv *env, jobject obj);
0
答えは正解です。なぜそれを受け入れないのですか?
追加された 著者 vgonisanz,
これを行うにはjavahツールを使用してください。
追加された 著者 bmargulies,
純粋なCの長い時間の後に目的の最初のステップ... :)
追加された 著者 theWalker,
"C"モジュール: JNIEXPORT void JNICALL Java_ClassName_MethodName(JNIEnv * env、jobject obj); Javaでは、ClassName2の ClassName .this.MethodName();
追加された 著者 theWalker,
この MethodName()はどこですか?そしてあなたは内なる階級の中でそれをどのように正確に呼んでいますか?
追加された 著者 HashimR,

1 答え

javahを使用すると、関数名が標準のOuterClass $ InnerClassを取得し、Unicodeの数字に$を展開したように見えます。

JNIEXPORT void JNICALL Java_ClassName_00024ClassName2_MethodName(JNIEnv *, jobject);

醜いですが、それはうまくいくはずです。

4
追加された
あなたは私のヒーローの赤ちゃんです
追加された 著者 vgonisanz,