目录
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平台下,有无简单实用的技术借鉴,值得研究。
是微软在win8时代,开始研发的专门用来支持ARM架构芯片的独立的操作系统(不单独售卖,只提供OEM或在自己的surface平板、移动设备等中分发)。2023年1月10日起结束支持。
Windows RT_百度百科
WinRT虽然是微软的一个失败项目,但其技术,仍然值得使用和借鉴。
通过调用WinApi.WinRT提供对基于WinRT的ARM芯片指令的支持。
检索微软官网,会发现:
不直接走“Win32”的API ,而是与Win32、.Net“并列”的一个架构,但“内核”同样是Winapi.Windows:
通讯:
var
RoInitType: RO_INIT_TYPE = RO_INIT_MULTITHREADED;
type
RO_INIT_TYPE = (RO_INIT_SINGLETHREADED, RO_INIT_MULTITHREADED);
/// Base Delphi object needed for Windows Runtime classes. Implements IInspectable interface
//Windows运行时类所需的基本Delphi对象。实现IInspectable接口:
TInspectableObject = class(TInterfacedObject, IInspectable)
protected
FIIDS: array of TGUID;
public
/// Gets the interfaces that are implemented by the current Windows Runtime class
//获取由当前Windows运行时类实现的接口:
function GetIids(out iidCount: Cardinal; out iids: PGUID): HRESULT; stdcall;
/// Gets the fully qualified name of the current Windows Runtime object
//获取当前Windows运行时对象的规范命名空间:
function GetRuntimeClassName(out className: HSTRING): HRESULT; stdcall;
/// Gets the trust level of the current Windows Runtime object
//获取当前Windows运行时对象的信任级别:
function GetTrustLevel(out trust: TrustLevel): HRESULT; stdcall;
end;
/// Helper needed to automate life cycle of HSTRING type and conversions from/to string
//自动化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;
/// Checks that the internal HSTRING was created successfully
//检查内部HSTRING是否已成功创建:
property Valid: Boolean read FValid;
class operator Implicit(const S: TWindowsString): HSTRING; inline;
class operator Explicit(const S: string): TWindowsString;
/// Gets the string representation of the given HSTRING
//获取给定HSTRING对应的字符串:
class function HStringToString(const hs: HSTRING): string; static;
end;
就类似FMX和VCL在相应的跨客户机平台上的受支持一样。
从上述分析,服务端的应用支持ARM架构芯片设备,基本可以得到的如下启发:
一个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;
理论上讲,就应该能够成功跨ARM,完成服务端应用的迁升,这种方法应该是“通用”的、不依赖任何三方库、语言版本的差异的。
window及DOS专栏:
https://blog.csdn.net/pulledup/category_9605480.html
window专栏:
https://blog.csdn.net/pulledup/category_9299987.html