wchar_t NUL в управляемом / неуправляемом C ++ - PullRequest
1 голос
/ 23 сентября 2011

Мне нужно использовать эту (неуправляемую) библиотеку C ++. Один из методов имеет wchar_t * в качестве параметра. Пробовал использовать его в C #, но все мои попытки привели к коду ошибки «неверный аргумент».

Я написал управляемую оболочку C ++ для нее - та же проблема. Теперь я сравнил значения аргументов из моей оболочки C ++ и нативного примера C ++, поставляемого с библиотекой. Единственное существенное отличие, которое я вижу, состоит в том, что NUL в моем управляемом C ++ - это «0 L» (часы Visual Studio), а NUL в неуправляемом примере - просто «0». Они оба имеют одинаковое значение ... 0.

Может ли это быть проблемой? (Я попытался вручную установить этот символ на «0», но получил те же результаты) Если да, как мне решить эту проблему?

EDIT: Изображение: http://img6.imageshack.us/img6/5977/comparisonofvalues.png Хорошо, с левой стороны - мой код (управляемый C ++), с правой стороны - пример (неуправляемый C ++). Как есть, правый работает, левый - нет (функция отклоняет аргументы). Я думаю, что проблема в 17-м персонаже - NUL. Есть еще мысли?

Ответы [ 2 ]

1 голос
/ 26 сентября 2011

Разница в вашем отладчике просто внешность.Вы заметите, что отладчик обычно показывает два значения: двоичное значение и соответствующий символ Unicode.Но вы не можете отобразить символ Unicode для двоичного значения 0. Два отладчика работают с ним немного по-разному (показывает L'' против ничего), но биты в памяти одинаковы.с другой стороны, ваша строка ip является мусором.

0 голосов
/ 23 сентября 2011

Вы можете проверить свойства вашего проекта. Есть опция компилятора, которая контролирует, будет ли wchar_t рассматриваться как встроенный тип или нет. Установка этого значения в NO будет использовать старое определение заголовка wchar_t и может решить вашу проблему.

...