में एक साधारण सी ++ कक्षा का उपयोग करें, मैं एंड्रॉइड एनडीके की मूल बातें सीखने की कोशिश कर रहा हूं, लेकिन जब मैं इसे सी ++ कक्षा के साथ उपयोग करना चाहता हूं तो मैं अटक गया हूं।एंड्रॉइड एनडीके
मैं समझता हूं कि इसे सरल कार्य के साथ कैसे उपयोग किया जाए, लेकिन मुझे फ़ील्ड और सी ++ कक्षा के तरीकों में हेरफेर करने में सक्षम होने के लिए क्या करना चाहिए?
मैं इस साधारण सी के साथ यह करने के लिए कोशिश कर रहा हूँ ++ वर्ग:
#include <cstdlib>
#include <jni.h>
using namespace std;
class Point {
int x, y; // coordonnées du point
public:
Point() {
this->x = 0;
this->y = 0;
}
Point(int x, int y) {
this->x = x;
this->y = y;
}
int getX() const {
return x;
}
int getY() const {
return y;
}
Point symetrique() const {
return Point(-x, -y);
}
bool operator ==(const Point &p) const {
return this->x == p.getX() && this->y == p.getY();
}
};
extern "C" {
JNIEXPORT jlong JNICALL Java_com_example_jnipoint_JPoint_createPoint__
(JNIEnv *, jobject);
JNIEXPORT jlong JNICALL Java_com_example_jnipoint_JPoint_createPoint__II
(JNIEnv *, jobject, jint, jint);
JNIEXPORT jint JNICALL Java_com_example_jnipoint_JPoint_nativeGetX
(JNIEnv *, jobject, jlong);
JNIEXPORT jint JNICALL Java_com_example_jnipoint_JPoint_nativeGetY
(JNIEnv *, jobject, jlong);
JNIEXPORT jlong JNICALL Java_com_example_jnipoint_JPoint_nativeSymetrique
(JNIEnv *, jobject, jlong);
};
JNIEXPORT jlong JNICALL Java_com_example_jnipoint_JPoint_createPoint__(JNIEnv* env, jobject thiz) {
return (jlong)(new Point());
}
JNIEXPORT jlong JNICALL Java_com_example_jnipoint_JPoint_createPoint__II(JNIEnv* env, jobject thiz, jint x, jint y) {
return (jlong)(new Point(x, y));
}
JNIEXPORT jint JNICALL Java_com_example_jnipoint_JPoint_nativeGetX(JNIEnv* env, jobject thiz, jlong nativePointer) {
return ((Point*)nativePointer)->getX();
}
JNIEXPORT jint JNICALL Java_com_example_jnipoint_JPoint_nativeGetY(JNIEnv* env, jobject thiz, jlong nativePointer) {
return ((Point*)nativePointer)->getY();
}
jlong Java_com_example_jnipoint_JPoint_nativeSymetrique(JNIEnv* env, jobject thiz, jlong nativePointer) {
return ((Point*)nativePointer)->symetrique();
}
मैं अब तक नमूने लेकिन कुछ भी पता लगाने की कोशिश ... शायद मैं सही कीवर्ड्स
का उपयोग नहीं * अद्यतन *
मैं C++ प्वाइंट वर्ग के लिए एक जावा आवरण बनाया है और C++ फ़ाइल JNI तरीकों को जोड़ा गया।
public class JPoint {
private long nativePointer;
public JPoint() {
nativePointer = createPoint();
}
public JPoint(int x, int y) {
nativePointer = createPoint(x, y);
}
public int getX() {
return nativeGetX(nativePointer);
}
public int getY() {
return nativeGetY(nativePointer);
}
public JPoint symetrique() {
JPoint tmp = new JPoint();
tmp.nativePointer = nativeSymetrique(nativePointer);
return tmp;
}
// TODO
/*public boolean equals(Object o) {
return nativeEquals(o);
}*/
private native long createPoint(); // Void constructor
private native long createPoint(int x, int y);
private native int nativeGetX(long nativePointer);
private native int nativeGetY(long nativePointer);
private native long nativeSymetrique(long nativePointer);
//private native boolean nativeEquals(Object p); TODO
}
अभी मैं nativeSymetrique समारोह के साथ stucked हूँ, यह दर्शाता है कि मैं 'प्वाइंट' 'jlong' में परिवर्तित नहीं कर सकते हैं: कोड निम्नलिखित है। क्या कोई इस पर मेरी मदद कर सकता है ? धन्यवाद
* अद्यतन 2 *
बड़ा घूँट मेरी मुद्दों को हल किया है, तो आप रैपर हाथ से लिखने की जरूरत नहीं है और यह बड़ा पुस्तकालयों के लिए एक अच्छा विकल्प हो रहा है।
अच्छा सवाल, यदि आप "मुख्य()" से कुछ का उपयोग कर सकते हैं, तो आप मुख्य रूप से कुछ कार्यों को भी लिख सकते हैं जो वर्ग के कार्यों को कॉल करेंगे, यह बहुत बुरा तरीका है लेकिन शायद यह आपकी मदद करेगा :) –
क्या आप इसका उपयोग करते हैं JNI? आपके कोड में जेएनआई रैपर कहां है? – dilix
हां मैं जेएनआई का उपयोग करने की योजना बना रहा हूं लेकिन यह कोड सिर्फ एक साधारण सी ++ वर्ग है। मुझे आश्चर्य है कि मुझे जेएनआई को उस कोड के साथ कहां और कैसे रखा जाना चाहिए – Fr4nz