从 c++ 库中获取一个字符串,周围有一个 java 包装器
Get a string from a c++ library with a java wrapper around it
晚上好,
我有一个 c++ 库文件,我试图从中获取字符串值,但不是通过返回。
这是针对 Xamarin 中的 Android 应用程序构建。
.cpp文件
JNIEXPORT jint JNICALL Java_MyNamespace_ClassName_FunctionName
(JNIEnv *env, jclass obj, jstring returnString)
{
returnString = env->NewStringUTF("returnStringValue");
return 1;
}
在我的解决方案中,我有:
.cs文件
namespace myNamespace
{
[DllImport("FolderName", EntryPoint = "Java_MyNamespace_ClassName_FunctionName")]
private static extern int FunctionName(IntPtr env, IntPtr thiz, IntPtr returnString);
void test_function()
{
IntPtr j = new IntPtr();
int status = FunctionName(JNIEnv.Handle, IntPtr.Zero, j);
string ss = j.ToString();
//Where I am expecting ss to be containing "returnStringValue".
}
}
谢谢@SushiHangover
我们创建了一个字节数组
byte[] x = new byte[120];
已分配该内存并复制它
System.Runtime.InteropServices.Marshal.AllocHGlobal()
System.Runtime.InteropServices.Marshal.Copy()
然后使用以下方法进行转换:
System.Text.Encoding.UTF8.GetString()
显然,这效果很好。
问候