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