请问jawin 调用问题

wnwwnw 2007-12-25 10:46:42
请问一下java高手jawin 如 何成功调用dll中的如下函数?
并取得返回值?
int UTGetKeyName(IN long n, OUT char * KeyName);

网上这方面资料太少,jawin的文档里举的例子和说明也太少了,
...全文
67 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
此木 2008-08-27
  • 打赏
  • 举报
回复

/*
* 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;
}
此木 2008-08-27
  • 打赏
  • 举报
回复
/*
* 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;
}

62,614

社区成员

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

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