Является ли среда выполнения .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. Но это больше, чем просто простая оболочка или карта, она более точно описана как абстракция.