Маршалинг неуправляемой строки Unicode в .net. Высокие символы заменены вопросительными знаками

Это может быть, а может и не быть вопросом 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 (?)

5
задан bluedog 14 October 2011 в 05:29
поделиться