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

标签 java c# c++ xamarin

晚上好

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

相关文章:

java - JList 列出对象 ArrayList 的 toString()

java - 如何使用提供的 keystore 对 jar 文件进行签名

c# - 连接到 SocketVoiceChannel (discord.NET)

C++ : anti-aliased points overlapping (alpha blend)

c++ - gcc 4.3.3 编译器选项默认启用

java - ArrayList<String> 空指针异常

java - 为什么 OkHttp post 方法发送的是 get 请求而不是 post 请求?

c# - 在 Entity Framework 6 中为子集合的映射添加条件,类似于 NHibernate 的 "where"

c# - 是否有 C# "as"关键字的 Scala 等效项?

c++ - 将 3d 模型导入 Direct3D 11 示例