我要在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”请问各位高手,这究竟是什么问题呢?或者我应该怎样才能获取该指针的内容呢?万分感谢!