Соответствует ли среда выполнения .NET внутренним вызовам функций win32? - PullRequest
10 голосов
/ 27 апреля 2009

Другими словами, .NET Framework в конечном итоге делает вызовы куда-нибудь, чтобы выполнить свою работу? Или Microsoft полностью воссоздала все функциональные возможности библиотеки win32 в своей среде .NET.

Спасибо!

Ответы [ 7 ]

17 голосов
/ 27 апреля 2009

Это смесь. Очевидно, что такие вещи, как winforms, в значительной степени являются обертками вокруг функциональности Win32 (или смеси обоих миров), но WPF намного более управляем (с точки зрения фактического управляющего кода), как заметил Мэш, он может использовать DirectX для рендеринг). Аналогично, такие вещи, как доступ к файлу / сети, являются (по необходимости) обертками вокруг объектов ОС, как и объекты неуправляемой блокировки, такие как Mutex, но многие другие вещи управляются на 100%.

Так что это не простой ответ.

(правка) Кроме того, имейте в виду, что «.NET» - очень расплывчатый термин; Compact Framework, Micro Framework, Silverlight и т. Д. Могут иметь различные реализации, отличные от win32.

6 голосов
/ 27 апреля 2009

Обновление: понял, что я ответил на неправильный вопрос (вы сказали, что среда выполнения не является библиотекой классов) ... да ладно, я все равно оставлю этот болван ниже

Это зависит от части библиотеки:

  • Библиотека 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-сервера Microsoft CLR также сильно зависит от win32.

6 голосов
/ 27 апреля 2009

.NET-приложение - это просто еще один процесс Win32, поэтому в этом нет никакой магии, и, очевидно, оно будет использовать операционную систему подчеркивания. Даже библиотеки .NET в значительной степени используют Win32.

Примеры:

  • Управление памятью осуществляется внутренне для управляемого кода, но для сам процесс это обрабатывается просто как и любой другой процесс Win32.

  • В настоящее время управляемые темы также реализовано как потоки ОС.

5 голосов
/ 27 апреля 2009

В некоторых случаях (возможно, в большинстве случаев? Я не отразил всю структуру) .NET Framework делает вызовы win32. Большинство элементов управления - это просто элементы управления win32, снабженные несколькими новыми функциями.

3 голосов
/ 27 апреля 2009

Да, он вызывает функции win32 внутри. Например, метод OpenRead в классе File содержит:

    return new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);

и он в конечном итоге позвонит:

    SafeFileHandle handle = CreateFile(lpFileName, dwDesiredAccess, dwShareMode, securityAttrs, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);

, которая является нативной функцией win32, глубоко в методе.

2 голосов
/ 27 апреля 2009

Mono является реализацией среды выполнения .net, и она определенно не соответствует вызовам функций win32 (по крайней мере, в Linux)

Полагаю, ваш вопрос касался реализации Microsoft среды выполнения .net.

1 голос
/ 27 апреля 2009

Он вызывает .NET API, как и все приложения Windows. Но это больше, чем просто обертка или карта, точнее это абстракция.

...