C++ преобразовывается в MSIL?

Проверьте видео около 2:45. Он показывает, как использовать материал Read () этого класса.

Поверьте, вы после:

//I assume, you set the ComboBox DropDownStyle to DropDownList, to keep people from being able to type in bad key info?
comboBox1.SelectedIndex = comboBox1.FindStringExact(stringtofind);

Если вы позволите пользователям выбрать «ctrl - shift - alt key», как часть ярлыка, вам нужно разделить входящее значение. Но, из приведенного выше кода, похоже, что вы этого не сделали. Вот код, на случай, если вы передумаете.

    Keys hookKey = (Keys)new KeysConverter().ConvertFrom(value); //If value is a string

    checkBox1.Checked = ((hookKey & Keys.Control) == Keys.Control);
    checkBox2.Checked = ((hookKey & Keys.Alt) == Keys.Alt);
    checkBox3.Checked = ((hookKey & Keys.Shift) == Keys.Shift);

    hookKey = (((hookKey & Keys.Control) == Keys.Control) ? (hookKey &= ~Keys.Control) : hookKey);
    hookKey = (((hookKey & Keys.Shift) == Keys.Shift) ? (hookKey &= ~Keys.Shift) : hookKey);
    hookKey = (((hookKey & Keys.Alt) == Keys.Alt) ? (hookKey &= ~Keys.Alt) : hookKey);

    MessageBox.Show($"hookKey should only hold the key you need to put in the combobox : {hookKey}");
12
задан jalf 27 March 2009 в 04:06
поделиться

5 ответов

Хорошо это немного более сложно, чем это. Существует на самом деле две полностью различных версии поддерживающего.NET C++.

Старый, Управляемые Расширения для C++, был единственной опцией, доступной в Visual C++ 2002/2003. Это доступно в более новых компиляторах под опцией,/clr:oldSyntax. Это довольно неуклюже, поскольку это очень старается интегрироваться со стандартным C++, таким образом, все новые ключевые слова (и существуют многие из них), снабжаются префиксом двойные подчеркивания, и т.д. Код, сгенерированный этим компилятором, является смесью собственного компонента и кода MSIL, назвал IJW, "это просто работает".

Новый, названный C++ / CLI, является чистым новым языком, доступным в Visual C++ 2005 и более новый. Самое главное это поддерживает несколько режимов генерации кода. Опция сброса / снова генерирует смесь IJW кода MSIL и собственного компонента./clr:pure приводит к управляемому только блоку, хотя он может перевести собственные типы в соответствующие структуры .NET. Код поэтому не может быть безопасным с точки зрения типов и может использовать адресную арифметику с указателями, в значительной степени как C# с небезопасным/. И самой строгой из опций является/clr:safe, который производит безопасный с точки зрения типов, блок только для MSIL поддающийся проверке, точно как компилятор C# делает (без небезопасного/, который является).

Для различий между MC ++ и C++ / CLI, посмотрите Википедию.

Для описания переключателей компилятора см. MSDN.

PS. Байт-код.NET называют или MSIL (промежуточный язык Microsoft) или CIL (Общий Промежуточный язык). Миллиметр может обозначать Уровень интеграции Медиа, недокументированная библиотека низкого уровня, пользовавшаяся WPF и Настольным Менеджером окон Vista.

27
ответ дан 2 December 2019 в 03:00
поделиться

Это - довольно хорошее (если датированный) обсуждение управляемых по сравнению с неуправляемым C++.

В оболочке гайки C++ можно или управлять (скомпилированный в миллиметр) или неуправляемый (скомпилированный в собственный код).

6
ответ дан 2 December 2019 в 03:00
поделиться

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

С C++ можно или выполнить его как приложение.NET C++ / CLI или собственный компонент. Это - просто переключатель компилятора в Visual Studio однако существует довольно много различий в синтаксисе между двумя. Я лично думаю, узнавая, что обе разновидности полезны.

То, чтобы выбрать в Ваших проектах, зависит немного от требований, например, если Ваша программа должна взаимодействовать, другие управляемые модули как модули, записанные в C#, желательно использовать C++ / CLI для предотвращения некоторого служебного переключения между управляемым и неуправляемым кодом.

2
ответ дан 2 December 2019 в 03:00
поделиться

Это - вероятно, хорошая идея разделить понятия.

Во-первых, C++ является языком, и он ничего не указывает о том, какая платформа должна быть предназначена. В принципе прямой код C++ мог быть скомпилирован в собственный x86 ассемблер, байт-код Java, MSIL или что-либо еще, о чем Вы хотите думать. Я полагаю, что Adobe недавно сделал компилятор C++, который генерирует байт-код Flash.

Во-вторых, с типичной нерешительностью, Microsoft создала два C ++-derived языки, предназначающиеся для.NET. Во-первых, они сделали "управляемые расширения для C++". Затем они решили, что это высосало, угробило его и попыталось притвориться, что это никогда не существовало.

Теперь их лучший выбор для стиля.NET, C++ называют C++ / CLI, но это не C++. Это расширяет и изменяет язык многими нестандартными способами. (И я полагаю, что комитет по стандарту C++ запросил, чтобы они изменили имя для предотвращения беспорядка. Но они не сделали),

Visual Studio 2005 и более новые поддержки C++ / CLI. (в том, "Добавляют проект", они перечислены под Visual C++-> CLR),

Однако (Вы не думали, что это было настолько просто, не так ли?), Microsoft сделала это снова. После определения C++ / CLI, который является на самом деле обоснованно хорошо разработанной попыткой интеграции C++ с CLI, они поняли, что фактически никто не использует его! Оказывается, что даже программисты на C++ обычно предпочитают использовать C#, когда они работают в.NET и надлежащем, собственном C++ иначе.

Таким образом, теперь они фокусируются на создании interop между собственным C++ и.NET, более простой и более мощной. Однако C++ / CLI, вероятно, не уйдет. Это работает, и в некоторых случаях это полезно. Это - просто не C ++-killer, они первоначально надеялись на.

Visual Studio (начиная с навсегда) также поддерживает собственные приложения C++, скомпилированные в машинный код для процессоров типа x86, неиспорченный.NET. Они перечислены в, "Добавьте Проект" диалоговое окно под Visual C++-> Win32.

Таким образом, если Вы хотите изучить C++, у Вас есть два варианта: Изучите C++ / CLI, который ограничивает Вас языком только для MS, который да, генерирует MSIL вместо собственного машинного кода и требует, чтобы.NET работала, и обычно разве ценность не является беспокойством потому что, если Вы собираетесь взять зависимость от.NET так или иначе, почему бы не записать в C#?

Или изучите надлежащий C++, который является абсолютно отдельным от.NET и не может непосредственно сослаться на блоки.NET.

Точка основного вывода - то, что они - отдельные языки. Или Вы компилируете как C++ / CLI, что означает, что компилятор позволит Вам ссылаться на блоки.NET и сгенерирует код MSIL, или Вы компилируете как C++, в этом случае мир.NET не существует.

И наконец, предупреждение. Несмотря на мою формулировку выше ("надлежащий C++" и "неиспорченный.NET"), C++ не "лучше". Во многих случаях это не быстрее также. C++ имеет потенциал, чтобы быть быстрее, но он во многом зависит больше от программиста.

Компилятор C# повернет в значительной степени что-либо в довольно эффективный код. C++, с другой стороны, полно ловушек, которые сделают Ваш код медленнее, чем эквивалентный C#.

http://blogs.msdn.com/ricom/archive/2005/05/10/416151.aspx и сообщения в блоге, на которые это ссылается, стоят чтения для любого любопытного на предмет производительности подобного кода, написанного на этих двух языках.

Существует только одна область, где приложения C++ будут последовательно быстрее, и это находится во время запуска. приложению.NET, вероятно, придется загрузить платформу.NET и JIT код MSIL, где исходное приложение... только запускается.

Но кроме этого, это - вероятно, ошибка предположить, что C++ будет быстрее. Это может быть, потому что это дает Вам немного больше контроля. Но обычно, который просто означает, компилятор меньше может сохранить Вас от неэффективности, которую Вы создаете в своем коде.

21
ответ дан 2 December 2019 в 03:00
поделиться

C ++ Компоненты не могут легко ссылаться на сборки .NET (вам нужно использовать COM). Управляемый C ++ компилируется в CIL и имеет тот же профиль производительности к C #.

C ++ примерно на 10% быстрее для того же уровня оптомазации для большинства кода, однако C # требует половины времени для записи и отладки, так как для того же времени, когда я бы утверждал, что оптовары, которые вы можете поставить, сделает C # быстрее. ..

1
ответ дан 2 December 2019 в 03:00
поделиться
Другие вопросы по тегам:

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