jni 代码

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 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值