从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
,然后根据需要获取.NetString
。。