最近因为某些需要在学习JNI,不过碰到了一些问题一直解决不了,希望高手能帮忙解答一下。
我有一个vc的dll,其中有个函数:int gcjAdrStr2Code(char *address,ADR_CODE *adrCode )
其参数中的结构体定义如下
typedef struct {
int codeLevel; 
int cityCode; 
int choCode; 
int azaCode; 
int gaikuCode; 
int jukyoCode; 
} ADR_CODE
现在我是在java中定义了一个和c中结构体一样的class ADR_CODE和一个本地函数public native int gcjAdrStr2Code(String address,ADR_CODE adrCode ),请问该如何写c代码,将java中的class ADR_CODE传递赋值给c中的结构体,让其作为参数被c中的函数调用

解决方案 »

  1.   

    补充c中的函数如下:
    JNIEXPORT jint JNICALL Java_test_geocoderJNI_gcjAdrStr2Code(JNIEnv * env, jobject this, jstring address, jobject adrCode)
    {
       char* addr;
       addr = (char*)(*env)->GetStringUTFChars(env, address,0);
       /*
       *将class传递赋值给结构体
       */
       ...... 
    }
      

  2.   

    ADR_CODE st;
        jclass clsADR_CODE = env->GetObjectClass(adrCode);    jfieldID fid = env->GetFieldID(clsADR_CODE, "codeLevel", "I");
        st.codeLevel = env->GetIntField(adrCode, fid);    fid = env->GetFieldID(clsADR_CODE, "cityCode", "I");
        st.cityCode = env->GetIntField(adrCode, fid);    ...