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进行了艰苦卓绝的巨大修改,这个工程无疑是浩大的。

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 信息服务器怎么恢复,服务器数据恢复怎么弄[通俗易懂]

    信息服务器怎么恢复,服务器数据恢复怎么弄[通俗易懂]原标题:服务器数据恢复怎么弄服务器数据恢复怎么弄?说到服务器数据恢复,很多外行人或许不太明白。所谓的服务器数据恢复,首先需要拆分解释一下。何为服务器数据?小编给各位的解释就是:位于服务器存储介质上的信息就可以统称为服务器数据。那么,什么样的情况下需要服务器数据恢复呢?服务器数据恢复的前提是服务器的数据有损坏。何为数据损坏?数据信息发生意料之外的变化即为损坏或数据破坏!因此如果服务器损坏了大家也不要…

  • css设置横向滚动条样式_js设置滚动条样式

    css设置横向滚动条样式_js设置滚动条样式接上一篇,有的时候在项目里面会使用到滚动条但是浏览器默认的滚动条的样式不怎么好看这个时候需要进行一些处理一般用到两种1:隐藏滚动条,但是可以支持滚动的方法::-webkit-scrollbar{display:none}示例:https://www.jianshu.com/p/9efdb18d92a62:自定义滚动条样式.healthName::-we…

    2022年10月26日
  • PyCharm 配置 Git

    PyCharm 配置 Gitwindows下step1: 首先安装GitHubstep2: 找到git.exe的路径git.exe的默认路径如下:C:\Users\yourname\AppData\Local\GitHub\PortableGit_69703d1db91577f4c666e767a6ca5ec50a48d243\bin\git.exestep3: Pych

  • JS–免费刷流量软件工具源码

    JS–免费刷流量软件工具源码<!DOCTYPEHTMLPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><metahttp-equiv="Content-Type"cont

  • cmd 里面运行git提示“不是内部或外部命令,也不是可运行的程序”的解决办法…

    cmd 里面运行git提示“不是内部或外部命令,也不是可运行的程序”的解决办法…

    2021年10月20日
  • Docker 导出/导入镜像[通俗易懂]

    Docker 导出/导入镜像[通俗易懂]如果服务器网络不好或者pull不下来镜像,只能在其它网络比较好的机器上pull下来镜像,导出成一个文件,再下载上传到网络不好的机器上,然后再从文件中导出来,这样在网络不好的机器上也能使用docker镜像了。1、导出镜像首先使用dockerimages查看本机镜像,找到他的镜像id,如图所示:然后执行以下命令通过镜像id导出镜像到宿主机$dockersav…

发表回复

您的电子邮箱地址不会被公开。

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