Что ситуациями или за и против является к использованию C++ / CLI по C#

Компиляторы могут отказаться от Вашего запроса для встраивания.

Макросы будут всегда иметь их место.

Что-то я нахожу полезными, ОТЛАДКА #define для трассировки отладки - можно оставить его 1 при отладке проблемы (или даже уехать, это на во время целого цикла разработки) тогда выключают его, когда пора поставляться.

8
задан Brett Allen 9 December 2009 в 15:47
поделиться

4 ответа

С помощью C ++ / CLI вы можете создавать, в широком смысле, три типа объектов:

  1. Управляемые типы. Они будут компилироваться по существу до того же IL, что и эквивалентный C #. Здесь нет возможности производительности.
  2. Собственные типы. Компилируется в собственный код, как если бы вы использовали обычный C ++.
  3. Типы смешанного режима. Они компилируются в управляемый код, но позволяют вам также обращаться к собственным типам.

Вы можете думать о (3) как о написании кода C # с кодом PInvoke для доступа к собственному материалу - за исключением того, что все материалы PInvoke генерируются для вы.

Конечно, есть еще кое-что, а также некоторые предостережения - но это должно дать вам представление о том, насколько это полезно.

Другими словами, это действительно связующий язык. Хотя вы можете писать полноценные приложения на C ++ / CLI, Более нормальным является разделение управляемых и собственных частей и использование C ++ / CLI для более четкого связывания этих двух частей, чем с PInvoke.

Другое распространенное использование - расширение и расширение существующей собственной базы кода C ++ с помощью вызовов библиотеки .Net.

Просто будьте осторожны, чтобы вы хорошо разбили свой код, так как иногда это может быть довольно тонко при компиляции вашего чистого кода C ++ до IL прозрачно!

Что касается вашего примечания: PInvoke - это особый тип взаимодействия. Взаимодействие также имеет другие формы, такие как COM-взаимодействие. Фактически, точнее, PInvoke - это набор языковых функций, которые упрощают взаимодействие с собственным кодом.

Просто будьте осторожны, чтобы вы хорошо разбили свой код, так как иногда это может быть довольно тонко при компиляции вашего чистого кода C ++ до IL прозрачно!

Что касается вашего примечания: PInvoke - это особый тип взаимодействия. Взаимодействие также имеет другие формы, такие как COM-взаимодействие. Фактически, точнее, PInvoke - это набор языковых функций, которые упрощают взаимодействие с собственным кодом.

Просто будьте осторожны, чтобы вы хорошо разбили свой код, так как иногда это может быть довольно тонко при компиляции вашего чистого кода C ++ до IL прозрачно!

Что касается вашего примечания: PInvoke - это особый тип взаимодействия. Взаимодействие также имеет другие формы, такие как COM-взаимодействие. Фактически, точнее, PInvoke - это набор языковых функций, которые упрощают взаимодействие с собственным кодом.

13
ответ дан 5 December 2019 в 08:52
поделиться

Раньше я эффективно использовал управляемый C ++ (предшественник .NET 1.1 для C ++ / CLI). Я считаю, что лучше всего работает, когда у вас есть собственная библиотека C или C ++, которую вы хотите использовать в управляемом коде. Вы можете пройти весь маршрут Interop / PInvoke, который создает некрасивый код C # и часто имеет проблемы с сортировкой, или вы можете написать управляемую оболочку C ++, в которой C ++ / CLI действительно сияет.

Поскольку C ++ / CLI - это управляемый код, вы можете вызвать его из C # (или VB.NET, если вы так считаете) обычным способом, добавив ссылку на .DLL. Никакого маршалинга, никакого dllimport, ничего подобного. Просто нормальные ссылки на проекты. Кроме того, вы получаете преимущества статических связанных библиотек, если ваша собственная библиотека так спроектирована, что является хорошей вещью (tm).

3
ответ дан 5 December 2019 в 08:52
поделиться

Фил Нэш действительно добился больших успехов. Вот еще одно, о чем я сталкивался более одного раза, и это основная причина, по которой я использовал C ++ / CLI в прошлом:

Некоторые приложения расширяются, проверяя все библиотеки DLL в каком-либо месте на наличие экспортируемых функций с определенным именем. В C # нет способа объявить собственный экспорт в стиле C, но вы можете в C ++ / CLI. Я создаю «оболочку» в C ++ / CLI, которая экспортирует метод, обрабатывает любое преобразование структур C в управляемые объекты и передает вызов сборке, написанной на C #.

2
ответ дан 5 December 2019 в 08:52
поделиться

1) Вы объединяетесь с кем-то еще в вашей команде . Один человек пишет тест, другой реализует.

Это называется спариванием «пинг-понг».

Выполнение этого заставит вас обсудить дизайн и решить, что делать.

Такое обсуждение также облегчит задачу. чтобы увидеть, какие тесты вам понадобятся.

2) Когда я работаю самостоятельно, мне нравится пробовать куски кода в интерактивном режиме. Я просто набираю их в командной строке ruby. Когда я экспериментирую таким образом, мне часто нужно настроить некоторые данные для экспериментов и некоторые распечатки, чтобы увидеть, каков результат.

Эти небольшие самодостаточные одноразовые эксперименты обычно:

  • быстрый способ установить осуществимость реализации и
  • хорошее место для начала формализации в тесте. const и дескриптор отслеживания упакованных типов значений.

    шаблоны настраиваются во время компиляции. дженерики специализируются во время выполнения. Хотя CLR должна кэшировать универсальную специализацию для будущего использования (так что вы получаете один и тот же список каждый раз, когда используете его), производительность все равно падает каждый раз, когда запрашивается универсальная специализация.

    Я знаю, что другие языки отбрасывают атрибут const, но лучше, чем ничего не проверять во время компиляции.

    Наличие такого типа, как int ^, позволяет вам получить доступ к памяти в управляемом каталоге кучи без ненужной распаковки. Это может повысить производительность при передаче дескрипторов отслеживания упакованных значений в функции, которые ожидают дескриптор отслеживания, например Console :: WriteLine (Object ^). Конечно, ранней инициализации бокса не избежать.

1
ответ дан 5 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

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