系统: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"