【C++】JNI传递嵌套对象数组

1.编写Java类

public class UserPwdInfo {
    public int m_wPwdIndex;
    public String m_strPwd;
}

public class UserPwdList {
    public int m_wPwdTotal;
    public UserPwdInfo[] m_PwdList;
}

2.C++ 结构体定义

typedef struct _tagUserPwd
{
	WORD	m_wPwdIndex;
	char	m_strPwd[200];//chentr 20130604 密钥从50改到200
}USERPWD, *PUSERPWD;

typedef struct _tagUserPwdList
{
	WORD		m_wPwdTotal;
	_tagUserPwd	m_PwdList[256];
}USERPWDLIST, *PUSERPWDLIST;

3.java api

public static native void passJava2Native(UserPwdList userpwdList);

4.C++ 实现接口

/*
 * Class:     com_TiprayAPI_cpp_TiprayAPI
 * Method:    passJava2Native
 * Signature: (Lcom/TiprayAPI/cpp/UserPwdList;)V
 */
JNIEXPORT void JNICALL Java_com_TiprayAPI_cpp_TiprayAPI_passJava2Native
  (JNIEnv* env, jclass clazz, jobject obj)
{
    CString szMSG="";

    szMSG.Format("[LdTiprayAPI]call passJava2Native!");
	OutputDebugString(szMSG);

	jclass jcRec = (env)->FindClass("com/TiprayAPI/cpp/UserPwdList");
	jfieldID jfPwdTotal = (env)->GetFieldID( jcRec, "m_wPwdTotal", "I");

	//USERPWDLIST m_PwdList[]
	jfieldID jfUserPwdarrays = env->GetFieldID(jcRec, "m_PwdList", "[Lcom/TiprayAPI/cpp/UserPwdInfo;");

	int m_wPwdTotal = (env)->GetIntField(obj, jfPwdTotal);

	szMSG.Format("[LdTiprayAPI]m_wPwdTotal: %d",m_wPwdTotal);
	OutputDebugString(szMSG);


	jobjectArray jobj_arr = (jobjectArray)env->GetObjectField(obj,jfUserPwdarrays);

	for(int i=0;i< m_wPwdTotal; i++)
	{
		jobject jobj = env->GetObjectArrayElement(jobj_arr,i);
		jclass clazz_father = env->GetObjectClass(jobj);

		jfieldID jfPwdIndex = (env)->GetFieldID( clazz_father, "m_wPwdIndex", "I");

		int m_wPwdIndex = (env)->GetIntField(jobj, jfPwdIndex);

		szMSG.Format("[LdTiprayAPI]m_wPwdIndex: %d",m_wPwdIndex);
		OutputDebugString(szMSG);


		jfieldID jfStrpwd = (env)->GetFieldID(clazz_father, "m_strPwd","Ljava/lang/String;");

		jstring m_strPwd = (jstring)(env)->GetObjectField( jobj, jfStrpwd);
		//convert jstring to char
		char* charPwd = (char*) (env)->GetStringUTFChars(m_strPwd, 0);

		szMSG.Format("[LdTiprayAPI]m_strPwd: %s m_strPwd size : %d",charPwd,strlen(charPwd));
		OutputDebugString(szMSG);

	}
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值