В чем отличие Windows Forms Application C++ и C#

305
19 декабря 2016, 19:43

В чем отличие Windows Forms Application C++ и C#

Создаю два одинаковых проекта

Visual C++ - CLR - Windows Forms Application

и

Visual C# - Windows - Windows Forms Application

Исходный файл в C++ получается 48 кб

В C# всего 8 кб

Вопрос

Используют ли оба проекта Microsoft .NET Framework

или проект на C++ это как в Delphi без технологии .NET

???

и почему разный размер исполняемого файла получился? ведь внутри идентичный код

Answer 1

c++/cli использует .net. А просто с++ (win32, win, native и другие префиксы/суффиксы) - нет.

Почему размер разный - нужно смотреть декомпилятором внутрь. Там будет понятно. Возьмите ildasm (встроенный, стандартный) или бесплатный dotpeek от jetbrains + ссылка на хабре. Посмотрите внутрь своих проектов и сравните.

Используют ли оба проекта Microsoft .NET Framework

да

и почему разный размер исполняемого файла получился?

C# это самый родной язык для .net. Все что нужно, уже есть внутри фреймворка. Если чего то нет - проще добавить в фреймворк. Не даром ведь он сотни мегабайт.

C++/CLI - Это костыль. и приходиться делать "переходники". (хотя их можно было бы тоже запихать в фреймворк). Все таки философия с++ немножко перпендикулярна C# и .NET. И Майкрософт создала новый искусственный язык, который и не C++ и не C#.

ведь внутри идентичный код

нет. Он может и выполняет одно и тоже, но код разный.

Answer 2

При компиляции C++/CLI проекта в сборку инлайнится куча сервисного кода. В случае с C# такого "лишнего" кода совсем немного:

get_Default         
.ctor               
.cctor              
Dispose             
InitializeComponent 
sub_C0              
sub_F0              
get_ResourceManager 
get_Culture         
set_Culture         
Main

(обе сборки скомпилированы из пустых проектов WindowsFormsApplication)

READ ALSO
Библиотека graphics.h

Библиотека graphics.h

Как сделать возможным использование библиотеки graphicsh в среде Visual Studio 2010?

351
Вывод из функции

Вывод из функции

Есть функция main(), которая вызывает ф-ию addcat()В ф-ии addcat() должен осуществляться вывод printf("sud")

230
Ошибка доступа при логине

Ошибка доступа при логине

При первом вызове addacc() все проходит успешноПри втором выдаёт ошибку после ввода логина

222