jar*_*ope 11 c java java-native-interface android go
如何在Go中将C.jstring转换为可用的字符串?
我正在使用GoAndroid.
在C中,您可以执行类似此stackoverflow线程中的操作
JNIEXPORT void JNICALL Java_ClassName_MethodName(JNIEnv *env, jobject obj, jstring javaString)
{
const char *nativeString = (*env)->GetStringUTFChars(env, javaString, 0);
// use your string
(*env)->ReleaseStringUTFChars(env, javaString, nativeString);
}
Run Code Online (Sandbox Code Playgroud)
在Go它开始看起来像这样
func Java_ClassName_MethodName(env *C.JNIEnv, clazz C.jclass, jstring javaString) {
defer func() {
if err := recover(); err != nil {
log.Fatalf("panic: init: %v\n", err)
}
}()
// ???
}
Run Code Online (Sandbox Code Playgroud)
如果我是你,我会寻找 Java 到 C 字符串,然后使用标准 C 字符串到 Go 字符串。
我会考虑编写一个 C 函数,将 Java 字符串转换为 C 字符串并将其返回到 Go 运行时。
C 到 GoString:
b := C.malloc(50)
defer C.free(unsafe.Pointer(b))
C.callToCFunction(PChar(b), 50)
rs := C.GoString(PChar(b))
return rs, err
Run Code Online (Sandbox Code Playgroud)
Java 有自己的内存管理,因此应该有自己的方式将数据移动到 C 中。您可以使用 Java JNI 关键字来询问。
您在一个进程中使用 Java 和 Go 运行时。这可能会产生一些副作用。
| 归档时间: |
|
| 查看次数: |
614 次 |
| 最近记录: |