请教一个Java调用dll的问题,请各位高手帮忙看看,谢谢

bst10000 2010-01-04 02:23:12
想在本地代码中用输出参数传一个自定义的类数组,遇到了一些问题,请教一下各位高手,多谢
C++中的代码是这样的:
JNIEXPORT jint JNICALL Java_GetIEJni_getMapIes___3B_MapIe_2
(JNIEnv *jEnv, jobject jobj, jbyteArray msg, jobjectArray jobjIe)
{
int j=0;
for(int i=0;i<G_IE_BUF_SIZE;i++)
{
if(g_ie_buf[i].ie != ZERO)
{
printf("\nThe result are: %d,%d",g_ie_buf[i].ie,j);
jobject jIe = jEnv->GetObjectArrayElement(jobjIe,j);
printf("\naaaaaa");
jclass jClass = jEnv->GetObjectClass(jIe);
printf("\nbbbbbb");
jfieldID fie = jEnv->GetStaticFieldID(jClass,"ie","S");
printf("\ncccccc");
jEnv->SetStaticShortField(jClass,fie,g_ie_buf[i].ie);
printf("\ndddddd");
jfieldID flen = jEnv->GetStaticFieldID(jClass,"len","B");
printf("\neeeeee");
jEnv->SetStaticByteField(jClass,flen,g_ie_buf[i].elength);
printf("\naaabbb");
jEnv->SetObjectArrayElement(jobjIe,j,jClass);
printf("\ncccaaa");
printf("\nffffffff");
j++;
}
}
printf("\nThe Array is finished");
free(g_ie_buf);
return 1;
}
在java中运行,结果如下:
The result are: 63,0
aaaaaa
bbbbbb
cccccc
dddddd
eeeeee
aaabbb
cccaaa
ffffffff
The result are: 81,1
aaaaaa
bbbbbb
cccccc

很明显,进入第二次循环的时候,设置数组jobjIe中的元素时,就出错了,
当我把jEnv->SetObjectArrayElement(jobjIe,j,jClass);屏蔽掉时,程序不会出错,但是输出参数jobjIe中所有元素都是一样的,也就是只取了g_ie_buf中的最后一个值。
请问哪位有这方面的经验?还望不吝赐教,谢谢!

...全文
133 1 打赏 收藏 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zfangla 2010-01-04
  • 打赏
  • 举报
回复
jobjectArray不怎么好用,好象和JAVA的数组兼容有问题。我都是用的jobject,直接把JAVA中的Vector对象看做jobject。

示范:

JNIEXPORT jint JNICALL Java_GetIEJni_getMapIes___3B_MapIe_2
(JNIEnv *jEnv, jobject jobj, jbyteArray msg, jobject jteamMebs)
{
jclass jVect = jEnv->GetObjectClass( jobjIe );
...
jobject jb = jEnv->AllocObject( jcs );

jfieldID fd1 = jEnv->GetFieldID( jcs, "name", "Ljava/lang/String;" );
jfieldID fd2 = jEnv->GetFieldID( jcs, "age", "I" );

jEnv->SetObjectField( jb, fd1, jEnv->NewStringUTF(p->name.c_str()) );
jEnv->SetIntField( jb, fd2, p->age );

jmethodID va = jEnv->GetMethodID( jVect, "addElement", "(Ljava/lang/Object;)V" );
jEnv->CallVoidMethod( jteamMebs, va, jb );
...

...
}

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧