jni c运行java字符串_从jni c代码发送jstring到接收字符串作为参数的java函数

您尚未提及目标类名称和目标方法签名.因此,例如,考虑

java.lang.StringBuilder.append(java.lang.String)方法.

// First lets assume you have already received the next variables

void foo( JNIEnv* env, jobject obj )

{

// Call StringBuilder.append() method

}

现在你需要类名和方法签名(根据docs)

static char const StringBuilder_ClassName = "java/lang/StringBuilder";

static char const StringBuilder_append_MethodName = "append";

static char const StringBuilder_append_MethodSignature =

"(Ljava/lang/String;)Ljava/lang/StringBuilder;";

要从JNI代码调用java方法,您应该获得jmethodID

static jclass StringBuilder_Class = 0;

static jmethodID StringBuilder_append_Method = 0;

void Init( JNIEnv* env )

{

if( StringBuilder_Class == 0 ) {

StringBuilder_Class = (*env)->FindClass( env, StringBuilder_ClassName );

// TODO: Handle error if class not found

}

if( StringBuilder_append_Method == 0 ) {

StringBuilder_append_Method = (*env)->GetMethodID( env, StringBuilder_Class,

StringBuilder_append_MethodName, StringBuilder_append_MethodSignature );

// TODO: Handle error if method not found

}

}

void foo( JNIEnv* env, jobject obj )

{

Init();

char* str;

// str = ...;

jstring jString = (*env)->NewStringUTF( env, str );

// Because StringBuild.append() returns object, you should call CallObjectMethod

jobject ret = (*env)->CallObjectMethod( env, obj, jString );

// Here you can release local references, i.e.

// (*env)->DeleteLocalRef( env, ret );

// (*env)->DeleteLocalRef( env, jString );

// But it is not necessary. Local references are released automatically when

// thread returns from JNI code to Java code.

// So you can ignore the returned value and not to release the jString local

// reference, i.e. just call

// (*env)->CallObjectMethod( env, obj, jString );

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值