Android NDK'nın temellerini öğrenmeye çalışıyorum ama C++ sınıfı ile kullanmam gerektiğinde sıkışıp kaldım.Android NDK'da basit bir C++ sınıfı kullanın
Basit bir işlevle nasıl kullanılacağını anlıyorum ama C++ sınıfının alanlarını ve yöntemlerini kullanabilmek için ne yapmalıyım?
Ben bu basit c ile yapmaya çalışıyorum ++ sınıfı: Şimdiye kadar numune başka bir şey bulmaya çalıştılar
#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();
}
... Belki doğru anahtar kelimeleri
kullanmıyorum * *
GÜNCELLEME ben C++ Nokta sınıfı için bir Java sarıcı oluşturulan ve C++ dosya JNI yöntemlerine ekledi.
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
}
Şu anda nativeSymetrique fonksiyonu ile stucked değilim, ben 'jlong' için 'Noktasını' dönüştürmek olamayacağını söylüyor: Kod şudur. Bana bu konuda birileri yardımcı olabilir mi ? Teşekkür
* yudum benim sorunlarını çözmüş GÜNCELLEME 2 *
, sen sarmalayıcılarını el yazısıyla yazmak gerekmez ve o büyük kütüphaneler için iyi bir seçim gibi görünüyor.
iyi bir soru, eğer "main()" dan bir şey kullanabiliyorsanız, sınıf fonksiyonlarını çağıracak ana işlevler de yazabildiğinizden çok daha kötü bir yoldur ama belki size yardımcı olacaktır :) –
JNI'yı? JNI sarmalayıcı kodunuzda nerede? – dilix
Evet JNI kullanmayı planlıyorum, ancak bu kod sadece basit bir C++ sınıfı. JNI'yi bu kodla – Fr4nz