【Windows学习笔记】1:OneCore和Windows API

1 OneCore

主流Windows跑在PC上,Xbox跑的是从Windows 2000分支出来的版本,Windows Phone跑的是基于Windows CE(实时操作系统)的版本。

为了维护和扩展这些code方便,微软将kernels和base platform集成在一起叫OneCore,这个共享平台给所有的Windows版本使用。

这些平台互不相同,比如P在HoloLens上支持键鼠就不合理,所以这些部分不在OneCore里,但是kernel、driver和base platform binary之类的是相同的(有些feature可以通过registry-based或者policy-based settings使得在不同的平台上都make sense)。

2 Windows API

指和Windows相关OS的user-mode的系统编程接口,也叫Win32 API,但是指代的包含32-bit和64-bit的版本。在MSDN(Microsoft Developer Network)上可以在线浏览各种Windows API。

2.1 COM (Component Object Model)

由于Windows API最早都设计成C-style的function,好处是足够low level,并且能方便被其它语言access,但是坏处是naming consistency和logical groupings不好,所以就做了COM。

COM最早是给Office做文档之间的数据交换的(比如把Excel表嵌入在Word或者PPT里),这个功能最早是用基于DDE(Dynamic Data Exchange)的OLE(Object Linking and Embedding)做的,所以COM就是第二代的OLE,最早也叫OLE 2。

COM用的是类似C++实现virtual function的方式,COM client会用在virtual table机制下的一组method去调 COM server object,这样就解决了编译器的name mangling问题,所以它可以被很多不同的语言或者编译器调用,比如C/C++/VB/.Net/Delphi等。COM server一般就是以DLL或者EXE的形式。COM还有一些security、跨进程marshalling、线程模型之类的feature。

像DirectShow、Windows Media Foundation、DirectX等用的就是COM形式的API。

2.2 WinRT (Windows Runtime)

从Windows 8开始引入的,基于COM添加了各种扩展而构建的一种新的调用方式。

C++、JS以及.Net平台上的语言可以方便地用WinRT的API,比如对C++而言,是提供了一种标准之外的extension叫C++/CX来让它用简便的方式消费WinRT types。

2.3 .Net Framework

.Net Framework是Windows的一部分,下图是Windows版本默认安装的.Net Framework版本(可以装更新的.Net Framework版本,但是不能装更久的版本)。
在这里插入图片描述
.Net Framework主要由两个组件组成:

  • CLR(Common Language Runtime):.Net的runtime engine,包含将CIL(Common Intermediate Language)转换成底层的机器语言的JIT(Just In Time)编译器、GC、类型验证、code access security组件等等。
  • FCL(.Net Framework Class Library):一组实现好的类型集合,可以用于网络服务编程、数据库访问等等。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/878369.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

55-java多线程future

java多线程future 在Java中,Future 接口和 Callable 函数式接口一起被用来支持异步计算。Future 表示一个可能完成的异步计算的结果,通过 get 方法可以获取计算的结果。 下面是一个使用 Future 的简单示例: import java.util.concurrent.*…

宿舍|基于SprinBoot+vue的宿舍管理系统(源码+数据库+文档)

宿舍管理系统 基于SprinBootvue的私人诊所管理系统 一、前言 二、系统设计 三、系统功能设计 系统功能实现 后台模块实现 管理员功能实现 学生功能实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍&…

【计算机组成原理】六、总线:3.操作和定时

5.操作和定时 文章目录 5.操作和定时5.1总线传输的四个阶段5.2总线定时5.2.1同步通信5.2.2异步通信5.2.3半同步通信5.2.4分离式通信 2.3按时序控制方式 同步总线异步总线 5.1总线传输的四个阶段 总线周期: 申请分配阶段:由需要使用总线的主模块&#…

【C++11及其特性】左值和右值

左值和右值目录 一.左值和右值的报错1.简单定义2.函数返回值作左值3.表达式作左值 二.存储的层次结构1.CPU2.内存3.磁盘4.三者联系5.寄存器 三.左值和右值的概念1.左值2.右值3.转换 一.左值和右值的报错 1.简单定义 赋值号’左边的为左值,右边的为右值. 2.函数返回值作左值 …

kafka ---- producer与broker配置详解以及ack机制详解

一、producer 配置 1、bootstrap.servers kafka broker集群的ip列表,格式为:host1:port1,host2:port2,… 2、client.id 用于追踪消息的源头 3、retries 当发送失败时客户端会进行重试,重试的次数由retries指定,默认值是2147…

检测和处理异常值的方法

异常值检测 不同的方法适用于不同类型的数据和场景。选择合适的异常值检测方法应考虑以下因素: 数据类型(连续型、离散型、分类型等)。数据分布特征(正态分布、非正态分布、多维数据等)。数据规模和维度(…

力扣刷题(3)

整数反转 整数反转-力扣 思路&#xff1a; 利用%和/不断循环取待反转整数的最后一位&#xff0c;注意判断是否超出范围。 int reverse(int x){int y0;while(x){if(y > INT_MAX/10 || y < INT_MIN/10)return 0;int tmpx%10;yy*10tmp;x/10;}return y; }字符串转换整数 …

自动化代码报错:ElementClickInterceptedException 解决方案

在自动化测试中&#xff0c;如果有多个弹窗出现&#xff0c;代码执行可能会遇到ElementClickInterceptedException的错误&#xff0c;表明元素点击被拦截&#xff1a; 一般由于以下原因&#xff1a; 一、页面加载未完成 在页面尚未完全加载完成时尝试点击某个元素&#xff0c…

ENVI SARscape||笔记

介绍就不介绍了&#xff0c;直入主题&#xff01; 第一章 ENVI和SARscape 下载与安装&#xff1a; ENVI 5.6 软件安装包下载及安装激活教程&#xff01; (qq.com)https://mp.weixin.qq.com/s/kH0g5g9AALgDNPssfdZ8wQ 启动 ENVI 的启动模式有两种&#xff1a;ENVI和ENVIIDL&…

前端性能优化:提升网站加载速度的五个关键技巧

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介前端性能优化&#xff1a;提升网站加载速度的五个关键技巧1. 引言2. 前端性能优化的五个关键技巧2.1 减少HTTP请求技巧说明实现示例 2.2 启用浏览器缓存技巧说明实现示例 2.3 使用内容分发网络&#xff08;CDN&#xff09;技巧说明…

spring项目数据校验

在 Spring 项目中&#xff0c;数据校验是确保输入数据的完整性、有效性和一致性的重要环节。Spring 提供了多种方式来进行数据校验&#xff0c;包括使用注解、定义自定义校验器以及结合异常处理来统一管理校验错误。以下是如何在 Spring 项目中进行数据校验的详细介绍&#xff…

Java高级Day34-流补充

97.对象处理流 对象流-ObjectInputStream和ObjectOutputStream 具体说明&#xff1a; 以前 int n 100; 是在文件内保存了100&#xff0c;但现在的需求是要在文件内保存 int 100 即保存值和数据类型 这样的保存叫做 -> 序列化&#xff0c;把其重新恢复就叫 -> 反序列…

【MYSQL索引】1 索引基础数据准备部分

创建索引 在已经存在的表中创建索引可以使用ALTER TABLE语句或者CREATE INDEX语句。 使用ALTER TABLE语句创建索引 ALTER TABLE语句创建索引的基本语法如下&#xff1a; ALTER TABLE table_name ADD [UNIQUE | FULLTEXT | SPATIAL] [INDEX | KEY] [index_name] (col_name[le…

建设工程经济之工程经济(三)

技术方案不确定性分析 盈亏平衡分析是通过计算技术方案达产年盈亏平衡点&#xff08;BEP&#xff09;&#xff0c;分析技术方案成本与收入的平衡关系&#xff0c;判断技术方案对不确定性因素导致产销量变化的适应能力和抗风险能力。盈亏平衡点&#xff08;BEP&#xff09;的表…

Adobe DC 2022提示无法识别的错误 - 解决方案

Adobe DC 2022提示无法识别的错误 - 解决方案 问题解决方案更改安装&#xff08;推荐&#xff09;重新安装&#xff08;推荐&#xff09;降级安装&#xff08;不推荐&#xff09; 问题 使用Adobe DC 2022合并图片创建PDF时&#xff0c;会提示无法识别的错误&#xff0c;这是因…

Mac 安装Hadoop教程

1. 引言 本教程旨在介绍在Mac 电脑上安装Hadoop&#xff0c;便于编程开发人员对大数据技术的熟悉和掌握。 2.前提条件 2.1 安装JDK 想要在你的Mac电脑上安装Hadoop&#xff0c;你必须首先安装JDK。具体安装步骤这里就不详细描述了。你可参考Mac 下载JDK8。 2.2 配置ssh环境…

2024如何开始进入美业?美业创业步骤分享|博弈美业系统管理系统源码

进入美业可以是一个令人兴奋且具有挑战性的决定。以下是一些步骤&#xff0c;希望可以帮助你在美业建立自己的职业生涯&#xff1a; 1.确定你的兴趣和专长&#xff1a; 首先要考虑你对美业的兴趣和擅长的领域&#xff0c;比如化妆、美发、美甲、美容护理等。确定自己的兴趣和优…

【Go语言成长之路】多模块工作区入门

文章目录 【Go语言成长之路】多模块工作区入门前提条件一、创建一个模块二、创建工作空间三、创建第二个模块四、更多关于workspace 【Go语言成长之路】多模块工作区入门 ​ 多模块工作区(muti-module workspaces)可以使得开发者在多个模块中构建并且运行代码&#xff0c;相互…

C++:Github开源7.8Kstar的线程池介绍

目录 源码展示 1. 头文件和依赖 1. 2. 3. 4. 5. 和 6. 7. 8. 2. ThreadPool 类的定义 1. std::vector workers; 2. std::queue> tasks; 3. std::mutex queue_mutex; 4. std::condition_variable condition; 5. bool stop; 3. 构造函数 1. 初始化 …

另一种关于类的小例

前言 我们还是以一段关于构造函数的代码作为开端&#xff0c;我们以之前银行家的小项目为背景 class Account {constructor(owner, currency, pin) {this.owner owner;this.currency currency;this.pin pin;} }const ITshare new Account(ITshare, EUR, 21211); console.…