草庐IT

c# - .NET 与 Windows 内核/操作系统和其他操作系统的关系是什么

coder 2023-06-04 原文

我对 .NET 究竟是什么感到困惑。我是一名计算机科学专业的学生,​​使用 C++ 完成了大量 Win32 (WinAPI) 编程,并且非常了解 Win32 函数如何与 COM 和 Windows 内核本身交互。

但是 .NET 在哪里适合这一切呢?

  • 具体来说,如果 Win32 是用 C 编写的 API,那么 .NET 是什么?它也是用 C 编写的 API 吗?是否只能在 Win32 等 Windows 操作系统上运行?

  • .NET 是否在 Win32 API 之上运行?例如,.NET 函数 showWindow() (显然是我编造的)在幕后调用 Win32 函数来显示窗口,还是直接进入内核执行此操作?还是 .NET 就像 Java 虚拟机?

  • .NET 是否直接与 Windows 内核交互(如 Win32)并与 COM 对象交互? .NET 是否在沙盒中运行并且不允许对某些操作系统区域进行某些访问?

  • 我可以使用 Win32 API 以不同的语言编写代码,例如 c/c++、VB、Perl。我可以在 .NET 中编写哪些语言?

  • 这才是真正让我难过的地方。我听说过用 .NET 编写的 Web 应用程序?什么,怎么,什么?它是用什么语言写的? .NET 是否在 IE 之上运行? .NET Web 应用程序可以在 Firefox 或 Safari(MacOS) 上运行吗?是像 java 小程序一样的 .NET Web 应用程序,您是否也获得了 .NET 驱动程序。

最佳答案

一些简短的答案让你继续前进:

Specifically, if Win32 is an API written in C, what is .NET? Is it an API written in C also?

.NET 由多个部分组成。一部分称为 CLR。该部分是用 C++、C++/CLI 和一些程序集编写的。这负责运行 .NET 应用程序。即时 (JIT) 编译器是其中的重要组成部分。

然后是包含的库。这些主要是用 C# 编写的,但其中一些可能有部分是用 C++/CLI 编写的。您实际上可以获得许多包含库的源代码。

Does it only run on Windows OS like win32?

也没有,有一个在 Linux 上运行的端口(称为 Mono),有在 WIndows Phone 7 上运行的版本,然后是在 Mac 上也运行的 Silverlight....

Does .NET run ontop of the win32 API?

在很大程度上,是的,尽管在某些地方它开始取代常规的 WinAPI(它肯定是微软在某个阶段尝试对大部分或全部 WinAPI 进行 .Net 化的计划)。不过我不会用它编写驱动程序,你仍然会使用常规的 C/C++ 接口(interface)来连接内核 API。

这些库确实调用了 win32 API 的许多不同部分。这是与其他 Windows 应用程序顺利互操作所必需的。

Does .NET interact with ... COM objects?

是的,使用 COM 互操作。

Does .NET run in a sandbox & not allow some access to certain OS areas?

运行时的某些变体可以被沙盒化(Silverlight、WPF XBAP)。拥有 UnmanagedCode 权限的 .Net 应用程序也可以调用用非托管 C++ 编写的代码,并且可以完全不受限制地访问系统(尽管您仍然必须遵守文件 ACL 之类的小麻烦)。

I can code in different languages using the win32 API such as c/c++, VB, Perl. What languages can I code in .NET?

.Net 是一个带有 JIT 编译的运行时库。您可以使用许多构建在框架之上的语言。 JIT 编译也不是强制性的 - 您仍然可以编译您的应用程序以针对特定的 CPU 架构。

I hear about web applications written in .NET? What, how, wha? What language is it written in? Does .NET run ontop of IE? Does .NET webapps work on Firefox or on Safari(MacOS)?

这些应用程序可以用任何 .Net 语言编写,尽管实际上它们中的大多数将使用 C# 和 VB.Net。你一定听说过 ASP 吧?嗯,ASP.NET(及其姊妹 ASP.NET MVC)是下一代——它在服务器上运行并像许多其他服务器端语言一样呈现 HTML + javascript。您还可以选择在客户端上运行 Silverlight,它可以在浏览器内外运行。 Silverlight 绝对适用于 Firefox、Safari 和 Chrome。

关于c# - .NET 与 Windows 内核/操作系统和其他操作系统的关系是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7428974/

有关c# - .NET 与 Windows 内核/操作系统和其他操作系统的关系是什么的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  3. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  4. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  5. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  6. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  7. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  8. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  9. ruby - 为什么 4.1%2 使用 Ruby 返回 0.0999999999999996?但是 4.2%2==0.2 - 2

    为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返

  10. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

随机推荐