Имеется фрагмент когда
pin_ptr<const wchar_t> wch = PtrToStringChars(source);
auto ptr = reinterpret_cast<void const *>(wch);
const int Length = source->Length;
wchar_t * const data = new wchar_t[Length];
memcpy(data, ptr, Length * sizeof(wchar_t));
source
- поступает в качестве параметра функции.
Объясните пожалуйста, что делают данные функции, это просто копирование строки с одной переменной в другую? Перевожу данный код на c#
Данный фрагмент преобразует управляемую строку .NET в массив широких символов С++ и размещает его в динамической памяти. При этом он содержит потенциальную проблему: память под завершающий нуль-символ не выделяется, поэтому такой массив не будет корректно обработан многими функциями стандартной библиотеки для работы со строками (это может и не быть проблемой в конкретном коде, но помнить об этом полезно).
В C# обычно нет необходимости в таком преобразовании в явном виде, так как String имеет метод ToCharArray для преобразования в массив символов, а при вызове нативных функций маршаллер P/Invoke умеет автоматически преобразовывать объекты string (или StringBuilder) в неуправляемые строки. Близким аналогом является метод Marshal.StringToHGlobalUni, но он выделяет память под нуль-символ. Совсем буквальный перевод будет выглядеть как-то так:
IntPtr data = Marshal.AllocHGlobal(source.Length);
Marshal.Copy(source.ToCharArray(), 0, data, source.Length);
Виртуальный выделенный сервер (VDS) становится отличным выбором
Я новичок в Entity Framework и Fluent ApiЯ создал несколько моделей, создал базу данных
Мне нужно получить список шаблонов процесса в TFS, чтобы в дальнейшем создавать свои шаблоны процессовКак получить этот интерфейс?