Xamarin Android:在C中将字符串从C#转换为Unicode字符串的正确方法是什么?

Xamarin Android:在C中将字符串从C#转换为Unicode字符串的正确方法是什么?,第1张

概述我正在编写一个XamarinAndroid应用程序,并尝试编写Xamarin应用程序需要传递数据的C本机库.我需要将一个Unicode字符串传递给库,但是当我尝试时,我会遇到一些奇怪的行为.在我的本机共享库中,我有以下代码:extern"C"voidlogANSI(constchar*data){__android_log_print(AND

我正在编写一个Xamarin Android应用程序,并尝试编写Xamarin应用程序需要传递数据的C本机库.我需要将一个Unicode字符串传递给库,但是当我尝试时,我会遇到一些奇怪的行为.

在我的本机共享库中,我有以下代码:

extern "C" voID logANSI(const char* data) {  __androID_log_print(ANDROID_LOG_INFO, "StringMarshaling", "ANSI data: %s", data);}extern "C" voID logUnicode(const wchar_t* data) {  __androID_log_print(ANDROID_LOG_INFO, "StringMarshaling", "Unicode data: %ls", data);}

在C#方面,我有以下Dllimport声明:

[Dllimport("StringMarshaling", EntryPoint = "logANSI", SetLastError = true, CharSet = CharSet.Ansi, ThrowOnUnmappableChar = true)]public static extern voID LogANSI([MarshalAs(UnmanagedType.LPStr)] string data);[Dllimport("StringMarshaling", EntryPoint = "logUnicode", SetLastError = true, CharSet = CharSet.Unicode)]public static extern voID LogUnicode([MarshalAs(UnmanagedType.LPWStr)] string data);

然后我的Activity中有以下代码:

  StringMarshaling.LogANSI("12345");  StringMarshaling.LogUnicode("12345");

在日志输出中,我看到:

05-17 18:07:12.437  Unitech PA700 Info  8351  StringMarshaling  ANSI data: 1234505-17 18:07:12.437  Unitech PA700 Info  8351  StringMarshaling  Unicode data: 1

如何获得完整的字符串,而不仅仅是第一个字符?

解决方法:

__androID_log_print接受char *,因此:

使用此C/C++功能:

extern "C" voID logUnicode(const wchar_t* data) {    std::wstring fooStr = std::wstring(data);    __androID_log_print(ANDROID_LOG_INFO, "StringMarshaling", "Unicode data: %s", fooStr.c_str());}

有了这个Dllimport:

[Dllimport("StringMarshaling", EntryPoint = "logUnicode", SetLastError = true)]public static extern voID LogUnicode(string data);

呼叫:

StringMarshaling.LogUnicode("1          总结       

以上是内存溢出为你收集整理的Xamarin Android:在C中将字符串从C#转换为Unicode字符串的正确方法是什么?全部内容,希望文章能够帮你解决Xamarin Android:在C中将字符串从C#转换为Unicode字符串的正确方法是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1118516.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)