C # небезопасный контекст / тип указателя LPWStr - PullRequest
0 голосов
/ 22 сентября 2011

предположим, что у нас небезопасный контекст, потому что я хочу иметь указатель на параметр wchar_t, который передается из неуправляемого кода C ++. Например:

unsafe public(int* A, ???* B)
{
    _myInt = A;
    _myString = B;
}

Все нормально с параметром int, но как насчет типа ??? *? Я знаю, что для преобразования wchar_t в строковый тип C # для этого метода можно написать [MarshalAs (UnmanagedType.LPWStr)] перед параметром B. Но мне нужен какой-то собственный тип указателя для B, чтобы связать этот указатель с полем _myString. Есть ли что-то вроде wchar_t в C # или что еще можно сделать, чтобы указатель B хранился в другом месте класса? Спасибо, Jurgen

1 Ответ

1 голос
/ 03 октября 2011

Если у вас нет проблем с копированием строки за указателем во время создания строки c #, вы можете выполнить это следующим образом:

public static unsafe int Strlen(char* start)
{
  var eos = start;

  while (*(eos++) != 0);
  return (int) ((eos - start) - 1);
}

unsafe public(int* A, char* B)
{
    _myInt = A;

    _myString = new String(B, 0, Strlen(B));
}

Используемый здесь конструктор документирован в * MSDN 1005 *

...