Delphi 跨平台_delphi调用api接口

Delphi 跨平台_delphi调用api接口DELPHI是怎么实现跨平台的?

大家好,又见面了,我是你们的朋友全栈君。

DELPHI是怎么实现跨平台的?

首先跨平台必须要兼容原来的语法,以线程的临界区对象为例:

TCriticalSection = class(TSynchroObject)
{$IFDEF POSIX}
private type
TCritSec = record
FSync: TObject;
procedure Initialize; inline;
procedure Free; inline;
procedure Enter; inline;
procedure Leave; inline;
function TryEnter: Boolean; inline;
end;
{$ENDIF POSIX}
protected
{$IFDEF MSWINDOWS}
FSection: TRTLCriticalSection;
{$ENDIF MSWINDOWS}
{$IFDEF POSIX}
FSection: TCritSec;
{$ENDIF POSIX}
public
constructor Create;
destructor Destroy; override;
procedure Acquire; override;
procedure Release; override;
function TryEnter: Boolean;
procedure Enter; inline;
procedure Leave; inline;
end;

可以看出,已经不单是原来的从WINDOWS OS临界封装,通过{$IFDEF POSIX}跨平台编译开关,增加了跨平台的封装。

 

下面再以线程类TThread为例:

TThread = class
private type
PSynchronizeRecord = ^TSynchronizeRecord;
TSynchronizeRecord = record
FThread: TObject;
FMethod: TThreadMethod;
FProcedure: TThreadProcedure;
FSynchronizeException: TObject;
end;
private class var
FProcessorCount: Integer;
private
FThreadID: TThreadID;
{$IF Defined(MSWINDOWS)}
FHandle: THandle platform;
{$ELSEIF Defined(POSIX)}
FCreateSuspendedMutex: pthread_mutex_t;
FInitialSuspendDone: Boolean;
{$ENDIF POSIX}
FStarted: Boolean;
FCreateSuspended: Boolean;
FTerminated: Boolean;
FSuspended: Boolean;
FFreeOnTerminate: Boolean;
FFinished: Boolean;
FReturnValue: Integer;

。。。。。。

也和临界区类一样用跨平台编译开关封装了跨平台代码进来。

从上面的2个例子可以看出,DELPHI为了跨平台,对RTL进行了艰苦卓绝的巨大修改,这个工程无疑是浩大的。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107081.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Google Doodle:龙年 新春快乐 龙年进步!

    Google Doodle:龙年 新春快乐 龙年进步!看过春晚,放过×××,Google终于在北京时间1月23日的凌晨放出了龙年的Doodle: 转载于:https://blog.51cto.com/maclean/1278817

    2022年7月26日
    2
  • JavaSript模块规范 – AMD规范与CMD规范介绍(转)

    JavaSript模块规范 – AMD规范与CMD规范介绍(转)

    2022年2月23日
    43
  • linux通配符的用法_linux中rmdir命令

    linux通配符的用法_linux中rmdir命令注意:linux通配符和三剑客(grep,awk,sed)正则表达式是不一样的,因此,代表的意义也是有较大区别的。通配符一般用户命令行bash环境,而linux正则表达式用于grep,sed,awk场景。*:通配符,代表所有(0到多个)字符?:通配符,代表任意1个字符;:连续不同命令的分隔符#:配置文件注释|:管道~:当前用户的家目录-:上一次所在的路径$:变量前需要加的符号/:路径分隔符号,也是…

    2022年9月19日
    2
  • idea注释颜色修改_福昕阅读器注释颜色

    idea注释颜色修改_福昕阅读器注释颜色修改IDEA注释颜色

    2022年9月27日
    1
  • 【QGIS入门实战精品教程】2.1:初识QGIS软件[通俗易懂]

    【QGIS入门实战精品教程】2.1:初识QGIS软件[通俗易懂]从今天开始,我们一起来学习一款免费开源、对机器要求低、功能强大的GIS软件:QGIS!一、QGIS简介QGIS(原称QuantumGIS)是一个自由软件的桌面GIS软件。它提供数据的显示、编辑和分析功能。QGIS是一个用户界面友好的桌面地理信息系统,可运行在Linux、Unix、MacOSX和Windows等平台之上。QGIS是基于Qt,使用C++开发的一个用户界面友好、跨平台的免费开源版桌面地理信息系统。二、QGIS软件的主要特点支持多种GIS数据文件格式。通过GDAL..

    2022年6月16日
    41
  • matlab插值实验目的,matlab插值实验报告数学实验.doc

    matlab插值实验目的,matlab插值实验报告数学实验.docmatlab插值实验报告数学实验.doc新乡学院数学与信息科学系实验报告实验项目名称插值实验所属课程名称数学实验实验类型综合性实验实验日期班级学号姓名成绩一、实验概述【实验目的】掌握用MATLAB插值的方法,了解拉格朗日插值、线性插值、样条插值的基本思想,了解三种网格节点数据的插值方法的基本思想,了解掌握用MATLAB计算一维差值和二维插值的方法。【实验原理】拉格朗日LAGRANGE插值。已知函…

    2022年5月26日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号