从c++;带有java包装器的库

从c++;带有java包装器的库,java,c#,c++,xamarin,Java,C#,C++,Xamarin,晚上好, 我有一个C++库文件,我试图从中获得字符串值,但不是返回。 这是在Xamarin中构建的Android应用程序 .cpp文件 JNIEXPORT jint JNICALL Java_MyNamespace_ClassName_FunctionName (JNIEnv *env, jclass obj, jstring returnString) { returnString = env->NewStringUTF("returnString

晚上好,

我有一个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".
        }
    }
谢谢,宿醉

我们创建了一个字节数组

byte[] x = new byte[120];
分配内存并复制它

System.Runtime.InteropServices.Marshal.AllocHGlobal()
System.Runtime.InteropServices.Marshal.Copy()
然后使用以下方法进行转换:

System.Text.Encoding.UTF8.GetString()
显然这很有效

问候

谢谢@寿司宿醉

我们创建了一个字节数组

byte[] x = new byte[120];
分配内存并复制它

System.Runtime.InteropServices.Marshal.AllocHGlobal()
System.Runtime.InteropServices.Marshal.Copy()
然后使用以下方法进行转换:

System.Text.Encoding.UTF8.GetString()
显然这很有效


关于

,你在C++中分配了一个<代码> java。Lang.String < /C>(<代码> java::::字符串< /CUT>),因此不能直接通过C字符串IpPTR将其转换/转换。java C++ java java Lang.Object .<代码> >,从代码中获得< <代码> java .Lang.String <代码>,并且如果你需要,可以得到.net代码>字符串< /C>。你在C++中分配了<代码> Lang.String > <代码>(<代码>:j::Lang::String < /Cuff> >),因此不能直接通过C/A字符串ItPTR将其转换/转换。
IntPtr
将是一个
Java.Lang.Object
的句柄,因此从中获取
Java.Lang.String
,然后根据需要获取.Net
String
。。