晚上好
我有一个 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()
显然这很有效。
问候
关于java - 从 c++ 库中获取一个字符串,周围有一个 java 包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42933811/