package com.alex.parameters;
import java.io.Serializable;
public class ObjParam implements Serializable {
private String first;
private String last;
private String password;
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public boolean equals(Object obj) {
return ((ObjParam) obj).getFirst().equals(first)
&& ((ObjParam) obj).getLast().equals(last)
&& ((ObjParam) obj).getPassword().equals(password);
}
@Override
public int hashCode() {
return first.hashCode() + last.hashCode() + password.hashCode();
}
}
package com.alex.parameters;
public class ComplexObjectParam {
private int[] intArr;
private ObjParam[] objArr;
public int[] getIntArr() {
return intArr;
}
public void setIntArr(int[] intArr) {
this.intArr = intArr;
}
public ObjParam[] getObjArr() {
return objArr;
}
public void setObjArr(ObjParam[] objArr) {
this.objArr = objArr;
}
}
package com.alex.interfaces;
import com.alex.parameters.ObjParam;
public interface IJni {
public int getInt(int i);
public String getStr(String s);
public ObjParam getObj(ObjParam obj);
public int[] getIntArr(int[] intArr);
public String[] getStrArr(String[] strArr);
public ObjParam[] getObjArr(ObjParam[] objArr);
}
---------------------- c ++ ---------------------------------
// JniImpl.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "com_alex_impl_JniImpl.h"
#include <iostream>
#include <string.h>
using namespace std;
//#ifdef _MANAGED
//#pragma managed(push, off)
//#endif
//
//BOOL APIENTRY DllMain( HMODULE hModule,
// DWORD ul_reason_for_call,
// LPVOID lpReserved
// )
//{
//
// return TRUE;
//}
//
//#ifdef _MANAGED
//#pragma managed(pop)
//#endif
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_alex_impl_JniImpl
* Method: getInt
* Signature: (I)I
*/
JNIEXPORT jint JNICALL Java_com_alex_impl_JniImpl_getInt
(JNIEnv* env, jobject, jint param)
{
int result = param;
//call native lib here
cout << "----int:----- " << result << endl;
return result;
}
/*
* Class: com_alex_impl_JniImpl
* Method: getIntArr
* Signature: ([I)[I
*/
JNIEXPORT jintArray JNICALL Java_com_alex_impl_JniImpl_getIntArr
(JNIEnv* env, jobject, jintArray param)
{
int* pint = (int*)env->GetIntArrayElements(param,NULL);
jsize len = env->GetArrayLength(param);
//call native lib here
for(int i = 0; i < len; i++)
{
cout << i << "----int array:----- " << *(pint+i) << endl;
}
jintArray result = env->NewIntArray(len);
env->SetIntArrayRegion(result,0,len,(jint*)pint);
env->ReleaseIntArrayElements(param,(jint*)pint,0);
return result;
}
/*
* Class: com_alex_impl_JniImpl
* Method: getObj
* Signature: (Lcom/alex/parameters/ObjParam;)Lcom/alex/parameters/ObjParam;
*/
JNIEXPORT jobject JNICALL Java_com_alex_impl_JniImpl_getObj
(JNIEnv* env, jobject, jobject param)
{
jclass cls = env->GetObjectClass(param);
jmethodID mid_getFirst = env->GetMethodID(cls,"getFirst","()Ljava/lang/String;");
jmethodID mid_getLast = env->GetMethodID(cls,"getLast","()Ljava/lang/String;");
jmethodID mid_getPassword = env->GetMethodID(cls,"getPassword","()Ljava/lang/String;");
jmethodID mid_setFirst = env->GetMethodID(cls,"setFirst","(Ljava/lang/String;)V");
jmethodID mid_setLast = env->GetMethodID(cls,"setLast","(Ljava/lang/String;)V");
jmethodID mid_setPassword = env->GetMethodID(cls,"setPassword","(Ljava/lang/String;)V");
jstring jfirst = (jstring)env->CallObjectMethod(param,mid_getFirst);
jstring jlast = (jstring)env->CallObjectMethod(param,mid_getLast);
jstring jpassword = (jstring)env->CallObjectMethod(param,mid_getPassword);
char* first = (char*)env->GetStringUTFChars(jfirst,NULL);
char* last = (char*)env->GetStringUTFChars(jlast,NULL);
char* password = (char*)env->GetStringUTFChars(jpassword,NULL);
//call native lib here
cout << "first---------" << first << endl;
cout << "last---------" << last << endl;
cout << "password---------" << password << endl;
jstring jrfirst = env->NewStringUTF(first);
jstring jrlast = env->NewStringUTF(last);
jstring jrpassword = env->NewStringUTF(password);
jobject result = env->AllocObject(cls);
env->CallObjectMethod(result,mid_setFirst,jrfirst);
env->CallObjectMethod(result,mid_setLast,jrlast);
env->CallObjectMethod(result,mid_setPassword,jrpassword);
env->ReleaseStringUTFChars(jfirst,first);
env->ReleaseStringUTFChars(jlast,last);
env->ReleaseStringUTFChars(jpassword,password);
return result;
}
/*
* Class: com_alex_impl_JniImpl
* Method: getObjArr
* Signature: ([Lcom/alex/parameters/ObjParam;)[Lcom/alex/parameters/ObjParam;
*/
JNIEXPORT jobjectArray JNICALL Java_com_alex_impl_JniImpl_getObjArr
(JNIEnv* env, jobject, jobjectArray param)
{
jclass cls = env->FindClass("com/alex/parameters/ObjParam");
jmethodID mid_getFirst = env->GetMethodID(cls,"getFirst","()Ljava/lang/String;");
jmethodID mid_getLast = env->GetMethodID(cls,"getLast","()Ljava/lang/String;");
jmethodID mid_getPassword = env->GetMethodID(cls,"getPassword","()Ljava/lang/String;");
jmethodID mid_setFirst = env->GetMethodID(cls,"setFirst","(Ljava/lang/String;)V");
jmethodID mid_setLast = env->GetMethodID(cls,"setLast","(Ljava/lang/String;)V");
jmethodID mid_setPassword = env->GetMethodID(cls,"setPassword","(Ljava/lang/String;)V");
jsize len = env->GetArrayLength(param);
jobjectArray result = env->NewObjectArray(len,cls,NULL);
for(int i = 0; i < len; i++)
{
jobject elemobj = env->GetObjectArrayElement(param,i);
jstring jfirst = (jstring)env->CallObjectMethod(elemobj,mid_getFirst);
jstring jlast = (jstring)env->CallObjectMethod(elemobj,mid_getLast);
jstring jpassword = (jstring)env->CallObjectMethod(elemobj,mid_getPassword);
char* first = (char*)env->GetStringUTFChars(jfirst,NULL);
char* last = (char*)env->GetStringUTFChars(jlast,NULL);
char* password = (char*)env->GetStringUTFChars(jpassword,NULL);
//call native lib here
cout << "first---------" << first << endl;
cout << "last---------" << last << endl;
cout << "password---------" << password << endl;
jstring jrfirst = env->NewStringUTF(first);
jstring jrlast = env->NewStringUTF(last);
jstring jrpassword = env->NewStringUTF(password);
jobject tempobj = env->AllocObject(cls);
env->CallObjectMethod(tempobj,mid_setFirst,jrfirst);
env->CallObjectMethod(tempobj,mid_setLast,jrlast);
env->CallObjectMethod(tempobj,mid_setPassword,jrpassword);
env->SetObjectArrayElement(result,i,tempobj);
env->ReleaseStringUTFChars(jfirst,first);
env->ReleaseStringUTFChars(jlast,last);
env->ReleaseStringUTFChars(jpassword,password);
}
return result;
}
/*
* Class: com_alex_impl_JniImpl
* Method: getStr
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_alex_impl_JniImpl_getStr
(JNIEnv* env, jobject, jstring param)
{
char* str = (char*)env->GetStringUTFChars(param,NULL);
//call native lib here
cout << "str-----------" << str << endl;
jstring result = env->NewStringUTF(str);
env->ReleaseStringUTFChars(param,str);
return result;
}
/*
* Class: com_alex_impl_JniImpl
* Method: getStrArr
* Signature: ([Ljava/lang/String;)[Ljava/lang/String;
*/
JNIEXPORT jobjectArray JNICALL Java_com_alex_impl_JniImpl_getStrArr
(JNIEnv* env, jobject, jobjectArray param)
{
jclass cls = env->FindClass("java/lang/String");
jsize len = env->GetArrayLength(param);
jobjectArray result = env->NewObjectArray(len,cls,NULL);
for(int i = 0; i < len; i++)
{
jstring jelem = (jstring)env->GetObjectArrayElement(param,i);
char* str = (char*)env->GetStringUTFChars(jelem,NULL);
//call native lib here
cout << "str-----------" << str << endl;
jstring elem = env->NewStringUTF(str);
env->SetObjectArrayElement(result,i,elem);
env->ReleaseStringUTFChars(jelem,str);
}
return result;
}
#ifdef __cplusplus
}
#endif
import java.io.Serializable;
public class ObjParam implements Serializable {
private String first;
private String last;
private String password;
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public boolean equals(Object obj) {
return ((ObjParam) obj).getFirst().equals(first)
&& ((ObjParam) obj).getLast().equals(last)
&& ((ObjParam) obj).getPassword().equals(password);
}
@Override
public int hashCode() {
return first.hashCode() + last.hashCode() + password.hashCode();
}
}
package com.alex.parameters;
public class ComplexObjectParam {
private int[] intArr;
private ObjParam[] objArr;
public int[] getIntArr() {
return intArr;
}
public void setIntArr(int[] intArr) {
this.intArr = intArr;
}
public ObjParam[] getObjArr() {
return objArr;
}
public void setObjArr(ObjParam[] objArr) {
this.objArr = objArr;
}
}
package com.alex.interfaces;
import com.alex.parameters.ObjParam;
public interface IJni {
public int getInt(int i);
public String getStr(String s);
public ObjParam getObj(ObjParam obj);
public int[] getIntArr(int[] intArr);
public String[] getStrArr(String[] strArr);
public ObjParam[] getObjArr(ObjParam[] objArr);
}
---------------------- c ++ ---------------------------------
// JniImpl.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "com_alex_impl_JniImpl.h"
#include <iostream>
#include <string.h>
using namespace std;
//#ifdef _MANAGED
//#pragma managed(push, off)
//#endif
//
//BOOL APIENTRY DllMain( HMODULE hModule,
// DWORD ul_reason_for_call,
// LPVOID lpReserved
// )
//{
//
// return TRUE;
//}
//
//#ifdef _MANAGED
//#pragma managed(pop)
//#endif
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_alex_impl_JniImpl
* Method: getInt
* Signature: (I)I
*/
JNIEXPORT jint JNICALL Java_com_alex_impl_JniImpl_getInt
(JNIEnv* env, jobject, jint param)
{
int result = param;
//call native lib here
cout << "----int:----- " << result << endl;
return result;
}
/*
* Class: com_alex_impl_JniImpl
* Method: getIntArr
* Signature: ([I)[I
*/
JNIEXPORT jintArray JNICALL Java_com_alex_impl_JniImpl_getIntArr
(JNIEnv* env, jobject, jintArray param)
{
int* pint = (int*)env->GetIntArrayElements(param,NULL);
jsize len = env->GetArrayLength(param);
//call native lib here
for(int i = 0; i < len; i++)
{
cout << i << "----int array:----- " << *(pint+i) << endl;
}
jintArray result = env->NewIntArray(len);
env->SetIntArrayRegion(result,0,len,(jint*)pint);
env->ReleaseIntArrayElements(param,(jint*)pint,0);
return result;
}
/*
* Class: com_alex_impl_JniImpl
* Method: getObj
* Signature: (Lcom/alex/parameters/ObjParam;)Lcom/alex/parameters/ObjParam;
*/
JNIEXPORT jobject JNICALL Java_com_alex_impl_JniImpl_getObj
(JNIEnv* env, jobject, jobject param)
{
jclass cls = env->GetObjectClass(param);
jmethodID mid_getFirst = env->GetMethodID(cls,"getFirst","()Ljava/lang/String;");
jmethodID mid_getLast = env->GetMethodID(cls,"getLast","()Ljava/lang/String;");
jmethodID mid_getPassword = env->GetMethodID(cls,"getPassword","()Ljava/lang/String;");
jmethodID mid_setFirst = env->GetMethodID(cls,"setFirst","(Ljava/lang/String;)V");
jmethodID mid_setLast = env->GetMethodID(cls,"setLast","(Ljava/lang/String;)V");
jmethodID mid_setPassword = env->GetMethodID(cls,"setPassword","(Ljava/lang/String;)V");
jstring jfirst = (jstring)env->CallObjectMethod(param,mid_getFirst);
jstring jlast = (jstring)env->CallObjectMethod(param,mid_getLast);
jstring jpassword = (jstring)env->CallObjectMethod(param,mid_getPassword);
char* first = (char*)env->GetStringUTFChars(jfirst,NULL);
char* last = (char*)env->GetStringUTFChars(jlast,NULL);
char* password = (char*)env->GetStringUTFChars(jpassword,NULL);
//call native lib here
cout << "first---------" << first << endl;
cout << "last---------" << last << endl;
cout << "password---------" << password << endl;
jstring jrfirst = env->NewStringUTF(first);
jstring jrlast = env->NewStringUTF(last);
jstring jrpassword = env->NewStringUTF(password);
jobject result = env->AllocObject(cls);
env->CallObjectMethod(result,mid_setFirst,jrfirst);
env->CallObjectMethod(result,mid_setLast,jrlast);
env->CallObjectMethod(result,mid_setPassword,jrpassword);
env->ReleaseStringUTFChars(jfirst,first);
env->ReleaseStringUTFChars(jlast,last);
env->ReleaseStringUTFChars(jpassword,password);
return result;
}
/*
* Class: com_alex_impl_JniImpl
* Method: getObjArr
* Signature: ([Lcom/alex/parameters/ObjParam;)[Lcom/alex/parameters/ObjParam;
*/
JNIEXPORT jobjectArray JNICALL Java_com_alex_impl_JniImpl_getObjArr
(JNIEnv* env, jobject, jobjectArray param)
{
jclass cls = env->FindClass("com/alex/parameters/ObjParam");
jmethodID mid_getFirst = env->GetMethodID(cls,"getFirst","()Ljava/lang/String;");
jmethodID mid_getLast = env->GetMethodID(cls,"getLast","()Ljava/lang/String;");
jmethodID mid_getPassword = env->GetMethodID(cls,"getPassword","()Ljava/lang/String;");
jmethodID mid_setFirst = env->GetMethodID(cls,"setFirst","(Ljava/lang/String;)V");
jmethodID mid_setLast = env->GetMethodID(cls,"setLast","(Ljava/lang/String;)V");
jmethodID mid_setPassword = env->GetMethodID(cls,"setPassword","(Ljava/lang/String;)V");
jsize len = env->GetArrayLength(param);
jobjectArray result = env->NewObjectArray(len,cls,NULL);
for(int i = 0; i < len; i++)
{
jobject elemobj = env->GetObjectArrayElement(param,i);
jstring jfirst = (jstring)env->CallObjectMethod(elemobj,mid_getFirst);
jstring jlast = (jstring)env->CallObjectMethod(elemobj,mid_getLast);
jstring jpassword = (jstring)env->CallObjectMethod(elemobj,mid_getPassword);
char* first = (char*)env->GetStringUTFChars(jfirst,NULL);
char* last = (char*)env->GetStringUTFChars(jlast,NULL);
char* password = (char*)env->GetStringUTFChars(jpassword,NULL);
//call native lib here
cout << "first---------" << first << endl;
cout << "last---------" << last << endl;
cout << "password---------" << password << endl;
jstring jrfirst = env->NewStringUTF(first);
jstring jrlast = env->NewStringUTF(last);
jstring jrpassword = env->NewStringUTF(password);
jobject tempobj = env->AllocObject(cls);
env->CallObjectMethod(tempobj,mid_setFirst,jrfirst);
env->CallObjectMethod(tempobj,mid_setLast,jrlast);
env->CallObjectMethod(tempobj,mid_setPassword,jrpassword);
env->SetObjectArrayElement(result,i,tempobj);
env->ReleaseStringUTFChars(jfirst,first);
env->ReleaseStringUTFChars(jlast,last);
env->ReleaseStringUTFChars(jpassword,password);
}
return result;
}
/*
* Class: com_alex_impl_JniImpl
* Method: getStr
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_alex_impl_JniImpl_getStr
(JNIEnv* env, jobject, jstring param)
{
char* str = (char*)env->GetStringUTFChars(param,NULL);
//call native lib here
cout << "str-----------" << str << endl;
jstring result = env->NewStringUTF(str);
env->ReleaseStringUTFChars(param,str);
return result;
}
/*
* Class: com_alex_impl_JniImpl
* Method: getStrArr
* Signature: ([Ljava/lang/String;)[Ljava/lang/String;
*/
JNIEXPORT jobjectArray JNICALL Java_com_alex_impl_JniImpl_getStrArr
(JNIEnv* env, jobject, jobjectArray param)
{
jclass cls = env->FindClass("java/lang/String");
jsize len = env->GetArrayLength(param);
jobjectArray result = env->NewObjectArray(len,cls,NULL);
for(int i = 0; i < len; i++)
{
jstring jelem = (jstring)env->GetObjectArrayElement(param,i);
char* str = (char*)env->GetStringUTFChars(jelem,NULL);
//call native lib here
cout << "str-----------" << str << endl;
jstring elem = env->NewStringUTF(str);
env->SetObjectArrayElement(result,i,elem);
env->ReleaseStringUTFChars(jelem,str);
}
return result;
}
#ifdef __cplusplus
}
#endif