Это может быть, а может и не быть вопросом SWIG.
Я пытаюсь вернуть std :: wstring по значению из функции C ++ в C #. Возвращенная строка содержит смесь простых английских символов и символов иврита. Английские символы проходят нормально, но еврейские символы в какой-то момент преобразуются в знак вопроса.
Я использую SWIG для генерации кода сортировки. Пройдя через все это с помощью отладчика, мы переходим к следующему коду SWIG ...
static string CreateWString([MarshalAs(UnmanagedType.LPWStr)]IntPtr cString) {
string str = System.Runtime.InteropServices.Marshal.PtrToStringUni(cString);
return str;
}
На данный момент str выглядит идеально.
Затем это возвращается в сгенерированный SWIG код C ++, который возвращает str как void *.
Затем void * снова становится строкой .net в вызывающем коде. В телефонном коде все символы на иврите? Метки.
Есть идеи, что вызывает это?
Изменить:
Дополнительная информация
Как только CreateWString вернется к вызывающей программе C ++, вы увидите, что указатель в отладчике выглядит как строка ANSI? отмечает в нем. Кажется, что .net выполняет какое-то преобразование строки, прежде чем она вернется к вызывающей стороне. Звучит правильно? Как я могу это контролировать?
Редактировать 2: Кажется, мне нужно сделать MarshallAs для возвращаемого типа CreateWString, чтобы остановить преобразование .net в тип TCHAR (?)