阅读背景:

JNI调用so动态库并传参_AI知识搬运工

来源:互联网 

系统:UBANTU

JAVA版本:1.8

#include "Javahello.h"
#include <stdlib.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdarg.h>
#include <dlfcn.h>
#include <string.h>

extern "C" {
void *filehandle = NULL;

int (*hello)(char * , char * ) = NULL;



char* Jstring2CStr( JNIEnv * env, jstring jstr )
{ 
 char*   rtn   =   NULL; 
 jclass   clsstring   =   (*env).FindClass("java/lang/String");  
 jstring   strencode   =  (*env).NewStringUTF("GB2312"); 
 jmethodID   mid   =   (*env).GetMethodID(clsstring,   "getBytes",   "(Ljava/lang/String;)[B");  
 jbyteArray   barr=   (jbyteArray)(*env).CallObjectMethod(jstr,mid,strencode); 
 jsize   alen   =  (*env).GetArrayLength(barr); 
 jbyte*   ba   =   (*env).GetByteArrayElements(barr,JNI_FALSE); 
 if(alen   >   0) 
 { 
  rtn   =   (char*)malloc(alen+1);         //new   char[alen+1]; 
  memcpy(rtn,ba,alen); 
  rtn[alen]=0; 
 } 
 (*env).ReleaseByteArrayElements(barr,ba,0); 
 
 return rtn;
}  





JNIEXPORT jint JNICALL Java_hello_hello (JNIEnv * env, jclass obj,jstring src, jstring dst)
{
    filehandle = dlopen("libhello.so", RTLD_LAZY);
    if(filehandle)
    {

	char *src1 = (char*)(*env).GetStringUTFChars(src, 0);
	char *dst1 = (char*)(*env).GetStringUTFChars(dst, 0);
 
    
	 hello = (int (*)(char * , char *))dlsym(filehandle,"hello");

       int var = 0;

       var = hello(src1,dst1);


     dlclose(filehandle);
     filehandle = NULL;
	 return var;
    }
}


}#include "Javahello.h"



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: