Я пишу приложение для Xamarin для Android и пытаюсь также написать собственную библиотеку C ++, в которую приложение Xamarin должно передавать данные.Мне нужно передать строку 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);
Тогда у меня есть следующий код в моей Деятельности:
StringMarshaling.LogANSI("12345");
StringMarshaling.LogUnicode("12345");
В выводе журнала я вижу:
05-17 18:07:12.437 Unitech PA700 Info 8351 StringMarshaling ANSI data: 12345
05-17 18:07:12.437 Unitech PA700 Info 8351 StringMarshaling Unicode data: 1
Как получить полную строку, а не только первый символ?