delphi的ARM架构支持与System.Win.WinRT库

delphi的ARM架构支持与System.Win.WinRT库

目录

delphi的ARM架构支持与System.Win.WinRT库

一、WinRT

二、delphi的System.Win.WinRT库

2.1、支持ARM芯片指令

2.2、基于WinRT技术的特点

2.3、所以使用默认库而未经转化的服务端应用并不支持ARM架构服务器

2.4、对默认库的调用经System.Win.WinRT类型转化后服务端应用应该可以支持ARM

2.5、服务端应用若不使用默认GUI图形用户界面应该也可以支持ARM服务器

三、服务端跨ARM

喜欢的,就收藏并点个赞,鼓励我继续技术的原创写作及经验分享:


        随着ARM架构云服务器的愈加火爆,delphi和C++ Builder在MSWindows平台下,有无简单实用的技术借鉴,值得研究。

一、WinRT

        是微软在win8时代,开始研发的专门用来支持ARM架构芯片的独立的操作系统(不单独售卖,只提供OEM或在自己的surface平板、移动设备等中分发)。2023年1月10日起结束支持。

Windows RT_百度百科

二、delphi的System.Win.WinRT库

       WinRT虽然是微软的一个失败项目,但其技术,仍然值得使用和借鉴。

2.1、支持ARM芯片指令

        通过调用WinApi.WinRT提供对基于WinRT的ARM芯片指令的支持。

2.2、基于WinRT技术的特点

        检索微软官网,会发现: 

        不直接走“Win32”的API ,而是与Win32、.Net“并列”的一个架构,但“内核”同样是Winapi.Windows:

 通讯:

 

 

  •        整数统一用HString类型的序数范围
  •                         Win32(0..4294967295):THandle = NativeUInt; //(0..2^32-1)
  •                         Win64(0..18446744073709551615):THandle = NativeUInt;//(0..2^64-1)
  •        字符串需要通过TWindowsString结构体和HString整数之间进行转化
  •        字节序列化范围支持:s1,s2,s3,s4,s5,s6,s7,s8,s9,s10及其子集
  •        WinRT类有其独立的签名,进行类的属性存储:WinRTClassNameAttribute.Signature;
  •                         签名不同,数据包的SizeOf内存空间就会是不同数值的字节
  •                         {$IF defined(LINUX) or defined(MACOS) or defined(ANDROID)}
  •                         Syetem.ModuleCacheID()得到的模块缓存的签名不同。因而不转化类型信息,跨ARM架构就一定出问题。
  •        所有WinRT运行时的类型信息及其上下文Context的导入基类及其帮助类:TWinRTImport、TWinRTImportHelper
  •        RO指令支持单线程和多线程       
  •        WinRT依赖的相关API:Winapi.WinrtMetadata(WinRT元数据RO指令)、Winapi.CorHdr(定义运行时结构、需要使用的元数据)、Winapi.CorError、Winapi.Cor(Windows内核)、Winapi.CommonNames(Windows API的通用命名)
  •        WinRT的全部注册表位置:Software\Microsoft\.NETFramework
  •                        由此可见,它在设置时,就被定义为.NETFramework下的子集;后续技术延续,取决于.NETFramework的技术延续

var
  RoInitType: RO_INIT_TYPE = RO_INIT_MULTITHREADED;

type
  RO_INIT_TYPE = (RO_INIT_SINGLETHREADED, RO_INIT_MULTITHREADED);

  /// <summary>Base Delphi object needed for Windows Runtime classes. Implements IInspectable interface</summary>
//Windows运行时类所需的基本Delphi对象。实现IInspectable接口:

  TInspectableObject = class(TInterfacedObject, IInspectable)
  protected
    FIIDS: array of TGUID;
  public
    /// <summary>Gets the interfaces that are implemented by the current Windows Runtime class</summary>
//获取由当前Windows运行时类实现的接口:
    function GetIids(out iidCount: Cardinal; out iids: PGUID): HRESULT; stdcall;
    /// <summary>Gets the fully qualified name of the current Windows Runtime object</summary>
//获取当前Windows运行时对象的规范命名空间:
    function GetRuntimeClassName(out className: HSTRING): HRESULT; stdcall;
    /// <summary>Gets the trust level of the current Windows Runtime object</summary>
//获取当前Windows运行时对象的信任级别:
    function GetTrustLevel(out trust: TrustLevel): HRESULT; stdcall;
  end;

  /// <summary>Helper needed to automate life cycle of HSTRING type and conversions from/to string</summary>
//自动化HSTRING类型的生命周期和(从/到)字符串的转换所需的助手

  TWindowsString = record
  strict private
  type
    TWindowsStringNexus = class(TInterfacedObject)
    private
      FString: HSTRING;
    public
      constructor Create(AString: HSTRING);
      destructor Destroy; override;
    end;

    PWindowsString = ^TWindowsString;
  private
    FNexus: IInterface;
    FHandle: HSTRING;
    FValid: Boolean;
  public
    constructor Create(const S: string); overload;
    /// <summary>Checks that the internal HSTRING was created successfully</summary>
//检查内部HSTRING是否已成功创建:
    property Valid: Boolean read FValid;

    class operator Implicit(const S: TWindowsString): HSTRING; inline;
    class operator Explicit(const S: string): TWindowsString;
    /// <summary>Gets the string representation of the given HSTRING</summary>
//获取给定HSTRING对应的字符串:
    class function HStringToString(const hs: HSTRING): string; static;
  end;


 

2.3、所以使用默认库而未经转化的服务应用并不支持ARM架构服务器

2.4、对默认库的调用经System.Win.WinRT类型转化后服务端应用应该可以支持ARM

        就类似FMX和VCL在相应的跨客户机平台上的受支持一样。

2.5、服务端应用若不使用默认GUI图形用户界面应该也可以支持ARM服务器

三、服务端跨ARM

       从上述分析,服务端的应用支持ARM架构芯片设备,基本可以得到的如下启发:

  • 只要服务器设备及其ARM芯片提供商,公开了指令集RO;RW、ZI

一个ARM程序包括三个段:RO,RW,ZI。

RO是指程序中的指令和常量:eg:指令如if else等,常量如 const char a = 0,#define AA 10等;
RW是程序中的已初始化的变量:eg:int a = 10;
ZI是程序中未初始化的变量:eg:int a;

这三点可以理解为:
RO就是read only;
RW就是read/write;
ZI就是zero initial;

  • 借鉴System.Win.WinRT库的处理方法成功导入指令集
  • 实现对整数和字符串类型的I/O的上述转化(参考System.Win.WinRT库的处理方法)

       理论上讲,就应该能够成功跨ARM,完成服务端应用的迁升,这种方法应该是“通用”的、不依赖任何三方库、语言版本的差异的。

喜欢的,就收藏并点个赞,鼓励我继续技术的原创写作及经验分享:

window及DOS专栏:
https://blog.csdn.net/pulledup/category_9605480.html
window专栏:
https://blog.csdn.net/pulledup/category_9299987.html

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】初步认识Linux系统

Linux 操作系统 主要作用是管理好硬件设备&#xff0c;并为用户和应用程序提供一个简单的接口&#xff0c;以便于使用。 作为中间人&#xff0c;连接硬件和软件 常见操作系统 桌面操作系统 WindowsmacOsLinux 服务器操作系统 LinuxWindows Server 嵌入式操作系统 Linux …

深度学习图像分类、目标检测、图像分割源码小项目

​demo仓库和视频演示&#xff1a; 银色子弹zg的个人空间-银色子弹zg个人主页-哔哩哔哩视频 卷积网路CNN分类的模型一般使用包括alexnet、DenseNet、DLA、GoogleNet、Mobilenet、ResNet、ResNeXt、ShuffleNet、VGG、EfficientNet和Swin transformer等10多种模型 目标检测包括…

Java关键词synchronized

目录 一、通过卖票系统观察多线程的安全隐患 二、synchronized的基本知识 1.使用synchronized的原因 2.synchronized的作用 3.synchronized的基本格式 a.synchronized加在方法名前 b.synchronized用在方法中 4. Java锁机制 5.synchronized注意事项 三、使用synchronize…

Java Logback日志框架概述及logback.xml详解

日志技术具备的优势 可以将系统执行的信息选择性的记录到指定的位置&#xff08;控制台、文件中、数据库中)。 可以随时以开关的形式控制是否记录日志&#xff0c;无需修改源代码。 日志体系结构 Logback日志框架 Logback是由log4j创始人设计的另一个开源日志组件&#xff0…

MATLAB读取OpenFOAM的二进制文件

OpenFOAM的文件格式 上面是OpenFOAM二进制文件的格式&#xff0c;我们可以看出&#xff0c;前面21行都是无关的说明文件&#xff0c;22开始时除了一个括号之外&#xff0c;其它的都是数据。 读取数据 读取数据的思路非常简单&#xff0c;忽略不需要的&#xff0c;读取需要的。…

Autoware 跑 Demo(踩坑指南)

Autoware 跑 Demo&#xff08;踩坑指南&#xff09; 网上的博客和官方的教程&#xff0c;几乎都是一样的&#xff0c;但实际上跑不起来 Autoware 1.12学习整理–01–运行rosbag示例 Autoware入门学习&#xff08;三&#xff09;——Autoware软件功能使用介绍&#xff08;1/3&a…

【Unity3D】激光雷达特效

1 由深度纹理重构世界坐标 屏幕深度和法线纹理简介中对深度和法线纹理的来源、使用及推导过程进行了讲解&#xff0c;本文将介绍使用深度纹理重构世界坐标的方法&#xff0c;并使用重构后的世界坐标模拟激光雷达特效。 本文完整资源见→Unity3D激光雷达特效。 1&#xff09;重构…

基于51单片机的智能火灾报警系统温度烟雾光

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;火灾报警 获取完整源码源文件电路图仿真文件论文报告等 功能简介 51单片机MQ-2烟雾传感ADC0832模数转换芯片DS18B20温度传感器数码管显示按键模块声光报警模块 具体功能&#xff1a; 1、实时监测及显示温度值和烟雾浓度…

管理类联考——英语二——技巧篇——写作——B节——议论文——必备替换句型

议论文必备替换句型 (一&#xff09;表示很明显/众所周知的句型 It is obvious thatIt is clear thatIt is apparent thatIt is evident thatlt is self-evident thatIt is manifest thatIt is well-knownIt is known to all thatIt is widely-accepted thatIt is crystal-cl…

蓝牙客户端QBluetoothSocket的使用——Qt For Android

了解蓝牙 经典蓝牙和低功耗蓝牙差异 经典蓝牙&#xff08;Bluetooth Classic&#xff09;&#xff1a;分为基本速率/增强数据速率(BR/EDR)&#xff0c; 79个信道&#xff0c;在2.4GHz的(ISM)频段。支持点对点设备通信&#xff0c;主要用于实现无线音频流传输&#xff0c;已成…

Ceph:关于Ceph 集群管理的一些笔记

写在前面 准备考试&#xff0c;整理ceph 相关笔记博文内容涉及&#xff0c;Ceph 管理工具 cephadm&#xff0c;ceph 编排器&#xff0c;Ceph CLI 和 Dashboard GUI 介绍理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守…

大数据分析平台释疑专用帖第二弹

不管是想要快速了解BI大数据分析平台&#xff0c;还是想要了解BI和自己的需求匹配度&#xff0c;都可关注我们的释疑专用贴。 1、可以分析直播数据吗&#xff1f; 严格来说&#xff0c;只要能够提供数据&#xff0c;就可以做数据可视化分析&#xff0c;直播数据也同理。 如果…

solr快速上手:整合SolrJ实现客户端操作(九)

0. 引言 我们前面学习了solr的服务端基础操作&#xff0c;实际项目中我们还需要在客户端调用solr&#xff0c;就像调用数据库一样&#xff0c;我们可以基于solrJ来实现对solr的客户端操作 1. SolrJ简介 SolrJ 是 Solr官方提供的 Java 客户端库&#xff0c;主要用于与 Solr 服…

Python 请求分页

文章目录 什么是 Python 中的分页带有下一个按钮的 Python 分页没有下一个按钮的 Python 分页无限滚动的 Python 分页带有加载更多按钮的分页 在本文中&#xff0c;我们将了解分页以及如何克服 Python 中与分页相关的问题。 读完本文后&#xff0c;我们将能够了解 Python 分页以…

经典目标检测YOLO系列(1)YOLO-V1算法及其在VOC2007数据集上的应用

经典目标检测YOLO系列(1)YOLO-V1算法及其在VOC2007数据集上的应用 1 YOLO-V1的简述 1.1 目标检测概述 ​ 目标检测有非常广泛的应用&#xff0c; 例如&#xff1a;在安防监控、手机支付中的人脸检测&#xff1b;在智慧交通&#xff0c;自动驾驶中的车辆检测&#xff1b;在智…

Parallel Desktop中按照的centos在切换root用户时,密码正确,但一直切换不成功,显示su: Authentication failure

目录 一、出现问题二、分析问题三、解决问题四、参考资料 一、出现问题 我的密码明明是输入正确的&#xff0c;但又一直给我报下面的错误 二、分析问题 我怀疑是我密码记错了&#xff0c;所以我点击Log Out&#xff0c;重新去输入了一下密码&#xff0c;发现是正确的我确认…

Build your own unconditional confidence

不要活在既定的社会价值体系中 人类的偏好大多数时候都是愚昧的 I play whatever gods give me 情绪价值稳定 解决问题的能力 Dont label yourself 真正的强者不会吝啬对他人的赞美 敬畏自然&#xff0c;敬畏未知事物 核心是你对这个事情是否感兴趣&#xff0c;觉得有价…

PHP 使用html创建PDF并设置水印

使用TCPDF库给PDF文件加水印&#xff0c;需要注意无法直接使用文本&#xff0c;需要创建水印图片后&#xff0c;通过图片来设置水印效果。 目录 创建PDF 创建合同模板 创建pdf文件 简单创建 设置文档信息 去掉默认页头脚 设置间距 设置字体支持中文 设置图片比例因子 …

代理ip数据采集的优缺点

随着互联网时代的到来&#xff0c;数据已经成为企业发展和决策的关键。但是&#xff0c;不同的网站它对于数据访问的限制和反爬虫措施却是给企业的数据采集带来了挑战。针对这一问题&#xff0c;代理IP数据采集技术应运而生。但是使用代理ip来进行数据采集也有优缺点。 一、代理…

【微信小程序】wxml、wxss、js、json文件介绍

&#x1f609;博主&#xff1a;初映CY的前说(前端领域) ,&#x1f4d2;本文核心&#xff1a;微信小程序的入门介绍 【前言】书接上回&#xff0c;我们知道了一个小程序的构成结构&#xff0c;接下来我们来进一步学习小程序的目录结构中的.wxml、.wxss、.js、.json。 目录 ⭐ 一…