如何使用 GraalVM 将 Java String 发布到具有 CCharPointer 类型的 java entryPoint 方法?

问题描述

我正在尝试使用 graalvm 创建 Java 代码的共享库(因此带有头文件和 lib 文件)。

将有一个带有 2 个 String 类型参数的 java 方法,我将从 Java 中调用方法

我的带有注解CEntryPoint的NativeNativeImpl java方法分析如下

@CEntryPoint(name = "Java_net_luculent_liems_license_apinative_Native_analysis")
public static CCharPointer analysis(Pointer jnienv,Pointer clazz,@CEntryPoint.Isolatethreadcontext long isolateId,CCharPointer dataCharStr) {
    //logic code
}

调用分析的本机 java 代码如下所示:

//declare native method 
private static native String analysis(long isolateThread,CCharPointer dataDomStr);

public static String analysisDataDom() {
        System.loadLibrary("nativeimpl");
        long isolateThread = createIsolate();
        String helloStr = "Hello from Java";
        //how to convert helloStr to CCharPointer type ???
        return analysis(isolateThread,helloStr);
}

我的问题喜欢评论如何将 java String 值发布到 CCharPointer 以获取本地方法

感谢所有回答!

解决方法

您可以使用 CTypeConversion(来自 import org.graalvm.nativeimage.c.type.CTypeConversion)将其转换为持有者,而 holder.get() 将返回一个 CCharPointer。

final CTypeConversion.CCharPointerHolder holder=CTypeConversion.toCString(result);
            return holder.get();