मेरे पास एनडीके लाइब्रेरी और संबंधित जावा-क्लास का एक कार्यान्वयन कार्यान्वयन है। लेकिन मैं उस वर्ग में ओवरलोडेड विधि जोड़ने में सक्षम नहीं हूं। वर्तमान में मेरी कक्षा में शामिल हैं:एंड्रॉइड एनडीके में देशी विधि हस्ताक्षर लिखने का सही तरीका क्या है?
package com.package;
public class MyClass
{
public static native String getFileName();
static
{
System.loadLibrary("mylib");
}
}
मेरे jniwrappers.cpp फ़ाइल निम्न घोषणा है:
JNIEXPORT jstring JNICALL
Java_com_package_MyClass_getFileName(_JNIEnv* env, jobject thiz);
इस बिंदु सब कुछ अप करने के लिए काम कर रहा है ठीक। लेकिन अगले मैं अपने वर्ग को संशोधित:
package com.package;
public class MyClass
{
public static native String getFileName();
public static native String getFileName(int index);
...
}
और एक और घोषणा jniwrappers.cpp में जोड़ें:
JNIEXPORT jstring JNICALL
Java_com_package_MyClass_getFileName__I(_JNIEnv* env, jobject thiz, jint index);
यह ठीक, एंड्रॉयड आवेदन शुरू होता है संकलित, UnsatisfiedLinkError नहीं मिलता है लेकिन जब यह साथ दूसरी विधि कॉल तर्क पहली सी ++ फ़ंक्शन कहा जा रहा है लेकिन दूसरा नहीं। मेरे पास उस वर्ग में तर्क के साथ अन्य विधियां हैं लेकिन उनमें से कोई भी ओवरलोड नहीं किया गया है, इसलिए उनके संबंधित जेएनआई हस्ताक्षर में तर्क नहीं हैं।
तो, मैं गलत क्या कर रहा हूं?
यह पहली बात थी जिसकी मैंने कोशिश की लेकिन कुछ गलत हो गया और मुझे असंतुष्ट लिंक्स त्रुटि मिली। अब मैंने इसे फिर से लिया है और सबकुछ काम कर रहा है। आपका बहुत बहुत धन्यवाद! –