.NET 运行时是否在内部映射到 win32 函数调用?

发布于 2024-07-18 05:40:45 字数 102 浏览 5 评论 0原文

换句话说,.NET 框架最终是否会在某个地方进行调用来完成其工作? 或者 Microsoft 在其 .NET 框架中完全重新创建了 win32 库的所有功能。

谢谢!

In other words, does the .NET framework eventually make calls somewhere to get its work done? Or did Microsoft completely re-create all the functionality of the win32 library in their .NET framework.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

调妓 2024-07-25 05:40:45

这是一个混合体。 显然,像 winforms 这样的东西很大程度上是 Win32 功能的包装(或两者的混合),但 WPF 的管理性要强得多(就实际控制代码而言;在幕后,正如 Mash 指出的那样,它可能使用 DirectX 来实现渲染)。 同样,文件/网络访问之类的东西(必然)是操作系统对象的包装器,就像 Mutex 这样的非托管锁对象 - 但许多其他东西都是 100% 托管的。

所以这不是一个简单的答案。

(编辑)另外 - 请记住“.NET”是一个非常模糊的术语; Compact Framework、Micro Framework、Silverlight 等可能有不同的非 win32 实现。

It is a mix. Obviously, things like winforms are largely wrappers around Win32 functionality (or a mix of both worlds), but WPF is a lot more managed (in terms of the actual control code; under the hood, as Mash notes, it may use DirectX for the rendering). Likewise, things like file/network access are (by necessity) wrappers around the OS objects, as are the unmanaged lock objects like Mutex - but many other things are 100% managed.

So it isn't a simple answer.

(edit) Also - keep in mind that ".NET" is a very vague term; Compact Framework, Micro Framework, Silverlight etc may have different, non-win32 implementations.

ˉ厌 2024-07-25 05:40:45

更新:意识到我回答了错误的问题(你说的是运行时而不是类库)...哦,好吧,无论如何我都会保留下面的废话!

这取决于库的组成部分:

  • System.Xml 库使用 MSXML
  • System.Reflection 不会,因为所有基于 IL 的
  • System.Text 都会使用和不使用。 有一些字符串操作的“快速”调用
  • System.Text.RegularExpressions 没有,就像 XML 命名空间一样,它都是使用 RegexRunner 内部类自定义的。
  • System.Diagnostics 使用 kernel32.dll 调用,例如 CreateProcess
  • System.IO 命名空间也可以 pinvoke
  • System.Threading 使用内部方法调用,最终(在 CLR 内部)调用 winapi 方法
  • System.Windows.Forms 是一个混合物,但最终使用 GDI
  • 系统。 Net (NetworkStream) 使用 ws2_32.dll,例如 WSARecv(..)

这只是来自摆弄 Reflector。 显然,作为 COM 服务器,Microsoft CLR 也严重依赖 win32。

Update: realised I answered the wrong question (you said runtime not class library)...oh well I'll keep the guff below in anyway!

It depends on the part of the library:

  • System.Xml library doesn't use MSXML
  • System.Reflection won't as it's all IL based
  • System.Text does and doesn't. There are some 'fast' calls for string manipulation
  • System.Text.RegularExpressions doesn't, like the XML namespace it's all custom using a RegexRunner internal class.
  • System.Diagnostics uses kernel32.dll calls such as CreateProcess
  • System.IO namespace does pinvoke also
  • System.Threading uses internal method calls which will eventually (inside the CLR) call winapi methods
  • System.Windows.Forms is a mixture but eventually uses GDI
  • System.Net (NetworkStream) uses ws2_32.dll such as WSARecv(..)

That's just from fiddling with Reflector. Obviously being a COM server the Microsoft CLR relies heavily on win32 too.

神仙妹妹 2024-07-25 05:40:45

.NET 应用程序只是另一个 Win32 进程,因此没有什么神奇之处,显然它将使用下线操作系统。 甚至 .NET 库也在很大程度上使用 Win32。

示例:

  • 处理内存管理
    内部用于托管代码,但对于
    进程本身只是处理
    与任何其他 Win32 进程一样。

  • 当前管理的线程是
    也作为操作系统线程实现。

A .NET application is just another Win32 process, so there is no magic and obviously it is going to use the underline operating system. Even the .NET libraries use Win32 to a great extent.

Examples:

  • Memory management is handled
    internally for managed code, but for
    the process itself it is handled just
    like any other Win32 process.

  • Currently managed threads are
    implemented as OS threads as well.

逆蝶 2024-07-25 05:40:45

在某些情况下(也许是大多数?我没有反映整个框架).NET 框架会调用 win32。 大多数控件只是包含一些新功能的 win32 控件。

In some cases (most, perhaps? I haven't reflected through the entire framework) the .NET framework makes calls to win32. Most controls are simply win32-controls wrapped with a few new features.

向日葵 2024-07-25 05:40:45

是的,它在内部调用 win32 函数。 例如,File 类中的 OpenRead 方法包含:

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

并且它最终会调用:

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

这是一个 win32 本机函数,位于该方法的深处。

Yes, it calls win32 functions internally. For example the OpenRead method in File class contains:

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

and it will eventually call:

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

which is a win32 native function, deep down in the method.

谁人与我共长歌 2024-07-25 05:40:45

Mono 是 .net 运行时的实现,它当然不会映射到 win32 函数调用(至少在 Linux 上)

我猜你的问题是指 Microsoft 的 .net 运行时实现。

Mono is an implementation of the .net runtime, and it certainly doesn't map to win32 function calls (at least on linux)

I guess your question was referring to Microsoft implementation of the .net runtime.

迟月 2024-07-25 05:40:45

它确实像所有 Windows 应用程序一样调用 .NET API。 但它不仅仅是一个简单的包装器或映射,更准确地描述为一种抽象。

It does call the .NET API as all Windows applications do. But it is more than just a simple wrapper or map, it is more accurately described as an abstraction.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文