Является ли среда выполнения .NET внутренней картой для вызовов функций win32?
Другими словами, среда .NET в конечном итоге делает вызовы где-то, чтобы выполнить свою работу? Или Microsoft полностью воссоздала все функции библиотеки win32 в своей платформе .NET.
Спасибо!
Ответы
Ответ 1
Это смесь. Очевидно, что такие вещи, как winforms, в значительной степени обертывают функциональность Win32 (или сочетание обоих миров), но WPF намного более управляется (с точки зрения фактического кода управления; под капотом, как отмечает Mash, он может использовать DirectX для рендеринг). Аналогичным образом, такие вещи, как доступ к файлам/сети, являются (по необходимости) обертками вокруг объектов ОС, а также неуправляемыми объектами блокировки, такими как Mutex
, но многие другие вещи управляются на 100%.
Так что это не простой ответ.
(edit) Также - имейте в виду, что ".NET" - очень неопределенный термин; Compact Framework, Micro Framework, Silverlight и т.д. Могут иметь разные реализации, отличные от win32.
Ответ 2
Приложение .NET - это еще один процесс Win32, поэтому нет никакой магии и, очевидно, он будет использовать операционную систему underline. Даже библиотеки .NET используют Win32 в значительной степени.
Примеры:
-
Управление памятью обрабатывается
внутренне для управляемого кода, но для
сам процесс обрабатывается просто
как и любой другой процесс Win32.
-
Текущие управляемые потоки
также реализованы как потоки ОС.
Ответ 3
Обновление: реализовано. Я ответил на неправильный вопрос (вы сказали, что время исполнения не является библиотекой классов). О, я все равно буду держать guff ниже!
Это зависит от части библиотеки:
- Библиотека System.Xml не использует MSXML
- System.Reflection не будет, поскольку все это на основе IL
- System.Text делает и не делает. Есть несколько "быстрых" вызовов для манипуляции строк.
- System.Text.RegularExpressions не используется, как пространство имён XML, все это настраивается с использованием внутреннего класса RegexRunner.
- System.Diagnostics использует вызовы kernel32.dll, такие как CreateProcess
- Пространство имен System.IO также поддерживает вывод
- System.Threading использует вызовы внутренних методов, которые в конечном итоге (внутри CLR) вызовут методы winapi.
- System.Windows.Forms - это смесь, но в конечном итоге использует GDI
- System.Net(NetworkStream) использует ws2_32.dll, например WSARecv (..)
Это просто от возиться с рефлектором. Очевидно, что являясь COM-сервером, CLR корпорации Microsoft в значительной степени зависит от win32.
Ответ 4
В некоторых случаях (возможно, большинство из них, возможно, не отражены во всей структуре),.NET Framework делает вызовы win32. Большинство элементов управления - это просто win32-элементы управления, обернутые несколькими новыми функциями.
Ответ 5
Да, он вызывает внутренние функции win32. Например, метод OpenRead в классе File содержит:
return new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
и он в конечном итоге вызовет:
SafeFileHandle handle = CreateFile(lpFileName, dwDesiredAccess, dwShareMode, securityAttrs, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
который является родной функцией win32, в глубине метода.
Ответ 6
Mono - это реализация среды выполнения .net, и она, безусловно, не отображает вызовы функций win32 (по крайней мере, на Linux)
Я предполагаю, что ваш вопрос касался внедрения среды .NET в .NET.
Ответ 7
Он вызывает API.NET, как это делают все приложения Windows. Но это больше, чем просто простая оболочка или карта, она более точно описана как абстракция.