我正在编写一个 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);
}
Run Code Online (Sandbox Code Playgroud)
在 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 …Run Code Online (Sandbox Code Playgroud)