В чем основное отличие между C ++ и C ++ .NET? [Дубликат]

18
  

Возможный дубликат:
В чем разница между Managed C ++ и C ++ / CLI? Что такое CLI / C ++? Как он отличается от «нормального» c ++?

Я сомневаюсь в различии между C ++ и C ++. NET.

Правильно ли это C ++ - неуправляемый код и C ++. NET - управляемый код?

Мне нужно запрограммировать проект на C ++. Для лучшего построения графического интерфейса я бы предпочел использовать C ++. NET.

У меня также есть другая простая библиотека C ++ (неуправляемый DLL-файл C ++), можно ли использовать ее как обычную библиотеку DLL в проекте C ++ .NET?

    
задан olidev 03.01.2012 в 11:07
источник

4 ответа

27
  

Правильно ли это C ++ - это неуправляемый код и C ++. NET - управляемый код.

Нет такой вещи, как «C ++. NET». Есть C ++ / CLI, который в основном является C ++ с расширениями Microsoft, которые позволяют вам писать код, ориентированный на платформу .NET. Код C ++ / CLI компилируется в байт-код CLR и запускается на виртуальной машине, как и на C #. Предположим, вы на самом деле говорите о C ++ / CLI.

В связи с этим можно сказать, что стандартный C ++ неуправляемый и управляется C ++ / CLI, но это очень терминология Microsoft. Вы никогда не увидите, что термин «неуправляемый» используется таким образом, когда речь идет о стандартном C ++, если только в сравнении с C ++ / CLI.

Оба стандартных C ++ и C ++ / CLI могут быть скомпилированы одним и тем же компилятором Visual C ++. Первый используется по умолчанию для компиляторов VC ++, в то время как для компиляции в последнем режиме необходим компилятор.

  

Мне нужно запрограммировать проект на C ++. Для лучшего построения графического интерфейса я   предпочитает использовать C ++. NET.

Вы можете создавать графические программы на C ++, а также C ++ / CLI. Это просто сложнее, потому что в стандартном C ++ нет стандартной библиотеки для создания графического интерфейса, такого как .NET framework, но есть много проектов, таких как Qt и wxWidgets , которые предоставляют инфраструктуру графического интерфейса C ++.

  

У меня также есть другая простая библиотека C ++ (неуправляемая dll C ++), будет ли она   можно использовать его как обычную библиотеку dll в проекте C ++ .NET?

Да. Может потребоваться дополнительная работа для работы с различными стандартными типами данных C ++ и типами данных .NET, но вы можете наверняка заставить их работать.

    
ответ дан In silico 03.01.2012 в 11:13
источник
  • Спасибо за ваш быстрый ответ. Если да, должен ли я использовать C ++ / CLI в Visual Studio для создания графического интерфейса вместо использования QT или wxWidgets? потому что, используя QT или wxWidgets, я ввожу другую зависимость моего приложения. Я полагаю, что если я просто использую C ++ / CLI, мне нужно иметь .net-структуру. Каковы плюсы и минусы использования C ++ / CLI, QT и wxWidgets? не могли бы вы помочь мне прояснить их? Заранее спасибо. –  olidev 03.01.2012 в 11:17
  • @devn: .NET framework также является зависимостью, которая даже больше, чем Qt или wxWidgets, поэтому вам понадобится зависимость в любом случае. Обратите внимание, что Qt и wxWidgets не требуют работы .NET framework. –  In silico 03.01.2012 в 11:21
  • , используя wxWidgest или QT, может сделать ваше приложение переносимым на нескольких платформах. .NET гарантирует, что вы исправлены в VisualStudio / Windows. Если вы уже знакомы с .NET Framework, это уменьшает усилия по сравнению с работой с совершенно новой структурой. С другой стороны, использование чистых C ++-библиотек не вводит дополнительный уровень (классы ref и родные классы), которые вы должны освоить. Короче говоря - это зависит от ваших знаний и использования. –  Tobias Langner 03.01.2012 в 11:21
  • @ В силиконе: нет, это не обязательно. Если вы планируете развертывать только на окнах, и если вы всегда хотите использовать Visual Studio, .NET Framework не вызывает большого беспокойства. Он доступен на большинстве компьютеров в любом случае, где нет QT / WX. –  Tobias Langner 03.01.2012 в 11:23
  • @Tobias Langner: для запуска приложений Qt или wxWidgets не требуется «runtime» Qt или wxWidgets, которые необходимо установить на клиентских компьютерах. AFAIK они могут быть скомпилированы статически, и эти рамки зависят только от примитивов операционной системы. Если не статически, вам нужно только отправить DLL вместе с приложением. –  In silico 03.01.2012 в 11:26
Показать остальные комментарии
10

Управляемый C ++ - это теперь устаревший набор отклонений Microsoft от C ++, включая грамматические и синтаксические расширения, ключевые слова и атрибуты, чтобы привести синтаксис C ++ и язык к .NET Framework. Эти расширения позволяют использовать код C ++ для среды Common Language Runtime (CLR) в виде управляемого кода, а также продолжать взаимодействие с собственным кодом. Управляемый C ++ не был полностью автономным или полноценным языком программирования.

Управляемый C ++

#using <mscorlib.dll>
using namespace System;

int main()  {
  Console::WriteLine("Hello, world!");
  return 0;
}

Vanilla C ++

#include <iostream>
using namespace std;

int main()
{
  cout << "Hello, world!";
 return 0;
}
    
ответ дан Software_Designer 03.01.2012 в 11:27
источник
  • Полностью бесполезная «информация». Вопрос явно спрашивает о C ++ / CLI, который не устарел. –  IInspectable 06.09.2016 в 11:47
4

Ну ... C ++ .NET - это неправильное название. Вы можете программировать на C ++ с помощью visual studio .NET. Ну, это то, что было вызвано еще некоторое время назад. Теперь люди дня просто называют это Visual Studio, с мотивом dot NET. Ну, по крайней мере, заставка не имеет большого логотипа .NET в логотипе.

Понятно, что с помощью Visual Studio (VS) вы можете программировать на управляемых и неуправляемых языках (много вариантов там, кстати).

Если вы хотите запрограммировать на C ++ с помощью Visual Studio, у вас есть два варианта:

  1. Неуправляемый или собственный C / C ++. Это старый (или новый, я думаю, тоже) C ++ что вы всегда знали, и вы программируете с неуправляемой памятью.

  2. Управляемый C ++. Они называют этот C ++ / CLI. Это прочитано C ++ по CLI, а не C ++ делится на CLI! Это C ++, который имеет дополнительные ключевые слова, и несколько дополнительные синтаксические элементы, чем собственный C ++. Это позволяет использовать библиотеку классов .NET Foundation и делать другие забавные вещи в .NET framework. Это, конечно, использует сборщик мусора для памяти для управляемых типов.

Лично мой любимый язык - C #, но если вам нужно взаимодействовать между C ++ и .NET, то определенно используйте Managed C ++. Это очень легко сделать, и я думаю, что это проще, чем другие материалы P / Invoke.

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

Ответ на ваш последний вопрос: да, вы можете определенно использовать его в своем приложении.

Вот как будут работать зависимости:

[C # App / GUI] зависит от [Managed C ++ assembly] зависит от [Native C ++ Lib]

    
ответ дан C Johnson 03.01.2012 в 11:22
источник
  • Просто добавление - управляемый C ++ теперь считается устаревшим в пользу C ++ / CLI (source: stackoverflow.com/tags/managed-c%2B%2B/info). –  StockB 08.01.2013 в 14:58
3
  • Да, C ++ - неуправляемый код и управляется C ++ / CLI.
  • Да, вы можете использовать свою неуправляемую C ++ DLL в своем проекте C ++ / CLI. Но для этого вам нужно написать обертку. Это означает, что вам необходимо определить неуправляемые методы, которые вы хотите получить в своем проекте C ++ / CLI.

Пример:

using System.Runtime.InteropServices;

[DllImport("YourDLLName")]
public static extern void UnmanagedMethodName(string parameter1);
    
ответ дан juergen d 03.01.2012 в 11:14
источник
  • Это неверно, вы можете использовать неуправляемый код C ++ из проектов C ++ / CLI без каких-либо проблем и без дополнительной работы. –  Timbo 03.01.2012 в 11:24
  • Не знал этого. Как? –  juergen d 03.01.2012 в 11:26
  • Просто # включить заголовочный файл и ссылку на .lib? Это C ++ в конце концов. –  Timbo 03.01.2012 в 11:27
  • Право. Я все время думал о C #. Виноват. –  juergen d 03.01.2012 в 11:30
  • @Timbo спасибо за ваше разъяснение. Но вместо файла lib у меня есть dll-файл. Нужно ли мне создавать собственный проект на C ++ для создания файла lib вместо файла dll, чтобы включить заголовочный файл? или можно также включить заголовочный файл с файлом dll? Я не уверен в этом. знаете ли вы пример того, как добавить файл lib или dll в управляемый C ++ проект в visual studio? Заранее спасибо. –  olidev 03.01.2012 в 11:41