问题描述
我正在尝试使用 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
}
//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();