Почему это называют 'Строкой'? [дубликат]

6
задан Community 23 May 2017 в 11:44
поделиться

3 ответа

Я бы держался подальше от P/Invoke, поскольку это довольно медленно по сравнению с IJW (It Just Works). Последний позволяет плавно переплетать управляемые и неуправляемые c++. Все, что вам нужно сделать, это создать управляемую сборку c++, записать управляемый класс, который виден из c #, и вызвать неуправляемый код из этого.

Uhm... Ок. Я был под впечатлением, что P/Invoke звонки были медленнее, что они по своей природе. Однако, имея явный контроль над сортировкой, вы можете сделать свою версию C + +/CLI, чтобы работать лучше во многих случаях.

Вот статья Microsoft об обоих механизмах:

http://msdn.microsoft.com/en-us/library/ms235282.aspx

Преимущества IJW

  • Нет необходимости писать объявления атрибутов DLLImport для неуправляемые API, используемые программой. Просто включить файл заголовка и ссылку с библиотека импорта.
  • Механизм IJW немного быстрее (например, заглушки IJW не необходимо проверить необходимость закрепления или копировать предметы данных, поскольку это сделано явно разработчиком).
  • Это наглядно иллюстрирует проблемы производительности. В данном случае то, что выполняется перевод из Юникода последовательность в последовательность ANSI и иметь распределение памяти оператора и освобождение. В этом случае a разработчик пишет код с помощью IJW осознает, что призвание _putws и использование PtrToStringChars было бы лучше для выполнения.
  • При вызове нескольких неуправляемых API, использующих одни и те же данные, выполняется их сортировка один раз и прохождение упакованной копии гораздо эффективнее, чем повторная упаковка каждый раз.

Есть и эстетические преимущества:

  • Код C # выглядит как код C # без какой-либо странности взаимодействия.
  • Нет необходимости определять атрибут DLLImport , нет необходимости определять какие-либо структуры данных (также с определенными атрибутами p/invoke), которые могли бы выглядеть следующим образом:

    [StructLayout (LayoutKind.Sequential, CharSet = CharSet.Ansi)] публичная структура DevMode { [MarshalAs (UnmanagedType.ByValTStr, StartConst = 32)] общедоступная последовательность dmDeviceName; }

  • Нет необходимости преобразовывать все типы примитивов параметров в их аналоги .NET (на этой странице содержится таблица, в которой показано, как управляемые типы сопоставляются с неуправляемыми типами).
  • Вы можете работать с C + +/CLI, который очень весело изучать и который действительно отшлифован. Он прошел долгий путь с VS 2003 и теперь является полноценным языком .NET. Документация Microsoft для него довольно хорошая, как и вся информация IJW.
  • Выполнение взаимодействия C++ в C + +/CLI кажется очень естественным по сравнению с C #. Это совершенно субъективно, но я бы предпочел сделать сортировку последовательностей в C++, которые делают Marshal.PtrToString (ptr) .
  • При раскрытии API вы, вероятно, захотите завершить весь материал P/Invoke на другом уровне, поэтому вам не придется иметь дело с уродством P/Invoke. Таким образом, вы имеете служебные данные всех маршалингов И уровня C # вокруг него.С C + +/CLI маршалинг и абстракция взаимодействия находятся в одном месте, и вы можете выбрать, сколько кроссинга вам нужно.

IMHO при вызове нечетной функции в Windows SDK используйте P/Invoke. Если вы представляете умеренно сложный C++ API управляемому миру, определенно C + +/CLI.

-121--922064-

Это также происходит при устаревшей или неполной установке PHPUnit. Помните, что после настройки PEAR необходимо добавить канал PHPUnit.de , чтобы получить актуальный пакет.

-121--830663-

Я верю, что это происходит из теории математики. Наборы, грамматики, языки, последовательности и т.д.

6
ответ дан 16 December 2019 в 21:39
поделиться

Я думаю, это происходит из математики ... В математике строка - это последовательность символов, что хорошо объясняет сущность строки и в языках программирования.

0
ответ дан 16 December 2019 в 21:39
поделиться

Строка - это строка символов. Это обычное употребление слова, восходящее к 1488 году.

строка (сущ.)

др. Streng "леска, шнур, нить" от P.Gmc. * strangiz (ср. ON Strengr, данн. streng, M.Du. strenge, Du. streng, OHG strang, нем. Strang "веревка, шнур"), от основания * strang- "туго, жестко", от основания PIE * strenk- "туго, узко; натянуть, скрутить" (см. напряжение). Постепенно ограничивается ранним M.E. линиями, которые меньше веревки. Смысл «ряда объектов, расположенных в линию» впервые зафиксирован в 1488 году. [...]

http://www.etymonline.com/index.php?term=string

2
ответ дан 16 December 2019 в 21:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: