请问一下java高手jawin   如   何成功调用dll中的如下函数? 
  并取得返回值? 
int   UTGetKeyName(IN   long   n,   OUT   char   *   KeyName); 网上这方面资料太少,jawin的文档里举的例子和说明也太少了,

解决方案 »

  1.   

    /*
     * Class:     testjni_UTSecJava
     * Method:    GetCurPubKey
     * Signature: (Ltestjni/CCert;)I
     */
    JNIEXPORT jint JNICALL Java_testjni_UTSecJava_GetCurPubKey
      (JNIEnv *jenv, jobject, jobject jobj)
    {
    int ret = ERROR_FUNCTION_ADDR;
    if(JavaInterFaceClass::UTGetCurPubKey)
    {
    JavaInterFaceClass::CCert cert;
    cert.CertLen = MAX_CERT_LEN;
    ret = JavaInterFaceClass::UTGetCurPubKey(cert.Cert, &cert.CertLen); jclass classobj   = jenv->GetObjectClass(jobj);
    jfieldID fieldID1 = jenv->GetFieldID(classobj, "EncodingType", "I") ;
    jfieldID fieldID2 = jenv->GetFieldID(classobj, "CertLen"     , "I") ;
    jfieldID fieldID3 = jenv->GetFieldID(classobj, "Cert"        , "[B") ; //jenv->SetIntField ( jobj, fieldID1, cert.EncodingType);
    jenv->SetIntField ( jobj, fieldID2, cert.CertLen);
    jbyteArray byteArray = jenv->NewByteArray(cert.CertLen) ;
    jenv->SetByteArrayRegion( byteArray, 0, cert.CertLen, (const jbyte*)cert.Cert);
    jenv->SetObjectField( jobj, fieldID3, byteArray);
    }
    return ret;
    }
      

  2.   


    /*
     * Class:     testjni_UTSecJava
     * Method:    UTGetKeyName
     * Signature: (ILjava/lang/String;)I
     */
    JNIEXPORT jint JNICALL Java_testjni_UTSecJava_UTGetKeyName
      (JNIEnv *jenv, jobject, jint ji, jobject jobj)
    {
    int ret = ERROR_FUNCTION_ADDR;
    char buff[1024]={0}; if(JavaInterFaceClass::UTGetKeyName)
    {
    ret = JavaInterFaceClass::UTGetKeyName((long)ji, buff);
    jclass classobj = jenv->GetObjectClass(jobj);
    jfieldID fieldID=jenv->GetFieldID(classobj,"str","Ljava/lang/String;") ;
    jenv->SetObjectField(jobj,fieldID, WindowsTojstring(jenv,buff));
    } return ret;
    }