رفتن به مطلب

قطعه کدهای JNI


ارسال‌های توصیه شده

چند تا از قطعه کدهایی که در CPP که نوشته  و به عنوان نمونه میشه ازش استفاده کرد رو در اینجا قرار خواهم داد

تابع newInstance

این تابع رو برای یکی از کتابخونه هام نوشتم.کارش هم ساخت آبجکت بر اساس نام کلاس- فرمت سازنده  و آرایه ای از آرگومان های مورد نیاز سازنده است

#include <jni.h>
#ifdef __cplusplus
extern "C" {
#endif

JNIEXPORT jobject JNICALL Java_ir_amin_irConstructor_newInstance
  (JNIEnv* pEnv, jobject pThis,jstring jstrCls,jstring jstrArg,jobjectArray jargList)
{
	jsize len = pEnv->GetArrayLength(jargList);
	jvalue values[len];
  for (int i=0; i<len; i++) {
  values[i].l=pEnv->GetObjectArrayElement(jargList,i);
    }
	jclass cls = pEnv->FindClass(pEnv->GetStringUTFChars(jstrCls, 0));
	jmethodID jmtdID = pEnv->GetMethodID(cls, "<init>", pEnv->GetStringUTFChars(jstrArg,0));
	return pEnv->NewObjectA(cls, jmtdID, values);
}
#ifdef __cplusplus
}
#endif

توضیحات:

خط زیر سایز آرایه آرگومان ها رو مشخص می کنه

jsize len = pEnv->GetArrayLength(jargList);

قسمت زیر هم آرایه از اشیا رو به آرایه ای از نوع jvalue تبدیل می کنه

	jvalue values[len];
  for (int i=0; i<len; i++) {
  values[i].l=pEnv->GetObjectArrayElement(jargList,i);
    }

و در نهایت مشخص کردن کلاس-متد سازنده و ساختن یک شی از کلاس مورد نظر

	jclass cls = pEnv->FindClass(pEnv->GetStringUTFChars(jstrCls, 0));
	jmethodID jmtdID = pEnv->GetMethodID(cls, "<init>", pEnv->GetStringUTFChars(jstrArg,0));
	return pEnv->NewObjectA(cls, jmtdID, values);

با ساخت یک آبجکت از کلاسی در CPP میشه به راحتی از متدهای اون استفاده کرد و به این ترتیب کلیه API اندروید در دسترس و می تونین قسمتی از کدهای جاوا و یا بیسیک خودتون رو به بستر cPP منتقل کنید تا امنیت آپ خودتون بیشتر بشه.

«موفق باشید.»

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...