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

时间:2009-04-27 08:09:08

标签: .net c winapi runtime

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

谢谢!

7 个答案:

答案 0 :(得分:17)

这是一个混合。显然,像winforms这样的东西主要是围绕Win32功能(或两者兼而有之)的包装,但是WPF管理得更多(就实际控制代码而言;在引擎盖下,正如Mash所说,它可能会使用DirectX来实现渲染)。同样,像文件/网络访问这样的东西(必要时)围绕操作系统对象包装,就像Mutex这样的非托管锁定对象 - 但许多其他东西都是100%管理的。

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

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

答案 1 :(得分:6)

.NET应用程序只是另一个Win32进程,因此没有任何魔力,显然它将使用下划线操作系统。甚至.NET库也在很大程度上使用Win32。

示例:

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

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

答案 2 :(得分:6)

更新:意识到我回答了错误的问题(你说运行时不是类库)...哦,不管怎么说,我会把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(..)

这只是摆弄着Reflector。显然,作为COM服务器,Microsoft CLR也非常依赖win32。

答案 3 :(得分:5)

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

答案 4 :(得分:3)

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

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

最终会调用:

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

这是一个win32本机函数,深入到方法中。

答案 5 :(得分:2)

Mono是.net运行时的一个实现,它肯定不会映射到win32函数调用(至少在linux上)

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

答案 6 :(得分:1)

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