繁体   English   中英

从一个带有java包装器的c ++库中获取一个字符串

[英]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()

显然这很好用。

问候

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM