我要在java中调用第三方的so,所以要自己写一个so把这个第三方的函数包进去,但是在第三方的so里边有一个函数int rsc_4442(int icdev, int len, unsigned char* p_string),是要读取IC卡里边的密码,其中p_string这个就是存放密码的地址指针,请问我在java中改如何获得p_string的内容呢(或者作为函数的返回值返回都可以)?
我自己写的c++函数是这样的:
JNIEXPORT jstring JNICALL Java_ICcardFunc_rsc_14442
(JNIEnv * env, jobject obj, jint a, jint b, jstring c)
{
void* handle = dlopen("/home/user/Linux/mwic.so",RTLD_LAZY);
typedef int (*rsc_4442)(int,int,char *);
dlerror();
rsc_4442 Rsc4442 = (rsc_4442) dlsym(handle,"rsc_4442");
const char *dlsym_error = dlerror();
if(dlsym_error){
dlclose(handle);
}
char * asd;
Rsc4442(a,b,asd);
char *result=NULL;
int nlen = sizeof(char)*(strlen(asd));
result=(char*)malloc(nlen);
strcpy(result,asd);
jstring jstr=stoJstring(env,result);
return jstr;
}
jstring stoJstring(JNIEnv* env, const char* pat)
{
jclass strClass = env->FindClass("Ljava/lang/String;");
jmethodID ctorID = env->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V");
jbyteArray bytes = env->NewByteArray(strlen(pat));
env->SetByteArrayRegion(bytes, 0, strlen(pat), (jbyte*)pat);
jstring encoding = env->NewStringUTF("utf-8");
return (jstring)env->NewObject(strClass, ctorID, bytes, encoding);
}
这个函数的头文件定义如下:
JNIEXPORT jstring JNICALL Java_ICcardFunc_rsc_14442
(JNIEnv *, jobject, jint, jint, jstring);
但是我在java中调用它确总是出错“Java Result: 139”请问各位高手,这究竟是什么问题呢?或者我应该怎样才能获取该指针的内容呢?万分感谢!
我自己写的c++函数是这样的:
JNIEXPORT jstring JNICALL Java_ICcardFunc_rsc_14442
(JNIEnv * env, jobject obj, jint a, jint b, jstring c)
{
void* handle = dlopen("/home/user/Linux/mwic.so",RTLD_LAZY);
typedef int (*rsc_4442)(int,int,char *);
dlerror();
rsc_4442 Rsc4442 = (rsc_4442) dlsym(handle,"rsc_4442");
const char *dlsym_error = dlerror();
if(dlsym_error){
dlclose(handle);
}
char * asd;
Rsc4442(a,b,asd);
char *result=NULL;
int nlen = sizeof(char)*(strlen(asd));
result=(char*)malloc(nlen);
strcpy(result,asd);
jstring jstr=stoJstring(env,result);
return jstr;
}
jstring stoJstring(JNIEnv* env, const char* pat)
{
jclass strClass = env->FindClass("Ljava/lang/String;");
jmethodID ctorID = env->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V");
jbyteArray bytes = env->NewByteArray(strlen(pat));
env->SetByteArrayRegion(bytes, 0, strlen(pat), (jbyte*)pat);
jstring encoding = env->NewStringUTF("utf-8");
return (jstring)env->NewObject(strClass, ctorID, bytes, encoding);
}
这个函数的头文件定义如下:
JNIEXPORT jstring JNICALL Java_ICcardFunc_rsc_14442
(JNIEnv *, jobject, jint, jint, jstring);
但是我在java中调用它确总是出错“Java Result: 139”请问各位高手,这究竟是什么问题呢?或者我应该怎样才能获取该指针的内容呢?万分感谢!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货