从 c++ 库中获取一个字符串,周围有一个 java 包装器

Get a string from a c++ library with a java wrapper around it

本文关键字:周围 字符串 有一个 java 包装 一个 c++ 获取      更新时间:2023-10-16

晚上好,

我有一个 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()

显然,这效果很好。

问候