跨平台开发 - Delphi 2011:如何建立一个跨Windows平台的图书馆?

时间:2009-09-14 07:26:54

标签: delphi cross-platform

或许您已经知道,很可能下一版本的Delphi将是cross-platform。此外,这里有一些polls

虽然编写交叉编译器并不是我们现在非常感兴趣的事情,但移植一个与多个平台绑定Windows的库当然可以。

您可以考虑,例如在VCL(Delphi的标准库)。虽然它仅适用于Windows,但它具有价值,当然,还有很多依赖它的代码库。

问题是: 哪个是使应用程序/库跨平台感知的最佳方法确保顺利转换/升级路径(当然尽可能多)?

我再次强调,我们不感兴趣哪个是跨平台开发的最佳方式(对此主题有疑问)。我们还对另一个要求感兴趣:旧的代码库/安装管理。

PS:欢迎来自其他语言(例如C / C ++)的类似情况的经验和/或方法被视为标准实践

提前致谢。

11 个答案:

答案 0 :(得分:4)

可视组件开发人员的观点:

为您的代码添加功能级别,以便能够在不更改组件的“核心”的情况下添加其他平台。 编译器希望有一个平台切换。 (最好不止一个,彼此合作。例如Windows / ARM,Windows / 386,OSX / Cacao / 386,Linux / Gnome / 386)。

布局结构可能看起来像这样。

  • ComponentJ.pas
  • 的Linux \ ComponentJ.pas
  • 的Linux \侏儒\ ComponentJ.pas
  • 的Linux \ KDE \ ComponentJ.pas
  • OSX \ ComponentJ.pas
  • 386个\ ComponentJ.pas
  • ARM \ ComponentJ.pas

作为应用程序开发人员:

我首先将我的代码中的所有WIN API调用移动到Windows目录中的一组库中,以便能够在库级别对其进行IFDEF并将其转换为我希望尽快支持的另一个平台。编译器变得可用,但只有当我遇到它们时。) 这也将增加为新平台添加适配器的可能性。 无论如何,将可能的依赖关系移除到一个中心位置是一种很好的做法。

答案 1 :(得分:4)

恕我直言,您无法构建xplatform Delphi并确保当前VCL应用程序的平滑过渡。它不会起作用。 VCL是(幸运的是,因为它允许很棒的应用程序)在设计Windows时考虑到,并且尝试设计在不同平台上工作的兼容库只意味着更长的开发周期和许多妥协。结果将是一个没人愿意使用的图书馆。看看VCL.NET发生了什么:这是错误的选择。它正在使用相同的操作系统!

我们知道,使用 native 应用程序定位非Windows平台需要本机GUI库。我们不关心从头开始创建GUI,对于我们的应用程序来说,它是要走的路,我们不需要使用不同标准的不同操作系统下的所有标准的Windows GUI - 我们需要能够编写完全本机代码目标OS的GUI。 其他应用程序可能无法在GUI移植中存在,但从长远来看,您无法获得真正的xplatform工具 - 您可以获得一个可以为其他平台编译但为其他平台带来一个平台范例的工具 - 它也不会受到欢迎“本地“其他平台上的开发人员。如果您是Linux或Mac开发人员,为什么要学习如何使用带有Windows继承的库到您的平台?你会发现它很痛苦。如果Embarcadero想要在实际的开发者基础之外销售XDelphi,它必须提供的不仅仅是新的CLX。

答案 2 :(得分:4)

我将从一些古老的经验中汲取代码库,在windows和dos之间交叉编译(Delphi 1 / Turbo Pascal 7)。经验法则是将代码分成多个单元。尝试使用Windows,消息或任何可视组件进行编码。如果您发现需要调用其中一个,那么将该调用放在另一个单元中并编写一个代理(您下载的抽象类可以正常工作)来调度通过。当发布交叉兼容版本时,您应该做的就是为新目标编写代理的另一面。

如果您正在设计基于表单的系统,那么请尽量使用尽可能多的标准组件。切勿在事件中直接实施任何“业务”规则,而是将它们放在另一个单元中并调用另一个单元来执行逻辑。

现在,确保您的最终项目交叉兼容需要进行更改,但通过遵循这些简单模式,您应该能够大大减少所需的工作量。

答案 3 :(得分:3)

迄今为止的经验表明,使Delphi应用程序与未来版本兼容的最佳方法是坚持使用纯Delphi组件,而不使用任何第三方。这样的应用程序可能很糟糕,但这就是我的看法。我使用了许多第三方组件,这些应用程序非常棒且成功。但是他们进入这个未来的可能性也不确定,这可能会导致这些变化出现问题,但我现在宁愿拥有一个出色的应用程序并且遇到问题而不是现在有一个糟糕的应用程序,而不需要担心它

答案 4 :(得分:1)

为了使VCL与Linux和Mac兼容,不应做太多妥协。 Windows是VCL的根。我更喜欢一个新的非常干净的GUI框架,即使没有任何向后兼容性。让VCL更胖更胖也不是一个好主意!

答案 5 :(得分:1)

  1. 制作跨平台的Pascal编译器
  2. 制作跨平台RTL
  3. 将QT放在最上面
  4. 好的,请看freepascallazarus

答案 6 :(得分:1)

我不明白。只要我们不使用任何第三方,所有.NET看起来都一样。    使用标准控件的Delphi已经完全正常运行但您的应用程序看起来很棒    像成千上万的人一样。

我认为Embar应该选择PDA,iPhone,Andriod作为Windows桌面已经吃掉了    98%的市场。

Mac价格昂贵,Linux根本不需要任何费用。没用到Mac和Linux。不值得    投资。

答案 7 :(得分:0)

嗯,除了事情说 - 谢谢所有 - 我认为我们需要一些额外的事情:

  • 我们需要工具来进行必要的转换
  • 我们需要工具来帮助我们针对(某种形式的)MVC模式进行编程

答案 8 :(得分:0)

只需选择最新的4.6 QT并添加Pascal和QT库之间的良好集成。 他们之前已经完成了(在Kylix时代)。如今,QT如此强大。

我相信QT甚至比VCL更好,并且至少更新和修复了10倍。

所以计划很简单:

  1. 制作跨平台的Pascal编译器
  2. 制作跨平台RTL
  3. 将QT放在最上面
  4. 您将在所有平台上拥有一流的原生应用程序。

答案 9 :(得分:0)

我的意见:

  1. 制作跨平台编译器(OS x / Linux /嵌入式解决方案?/ symbian?)。也许添加将pascal代码编译/转换为可移植的c / c ++代码的能力,然后在嵌入式平台上构建。
  2. RTL必须分为跨平台层和本机层(与JCL一样)。
  3. 为每个支持的平台(QT for ex)
  4. 添加新的核心组件以实现跨平台兼容性和本机组件
  5. 添加翻译工具以在平台的组件之间创建/转换,例如:将纯Windows窗体转换为mac os x cocoa的形式。
  6. 组件的所有窗口层次结构必须仅升级为支持x64且具有最大向后兼容性。所有跨平台组件都必须是并行层次结构。
  7. 可以重构下一版本的跨平台解决方案,并且可以包含迁移/转换实用程序。由于跨平台解决方案的代码库最小,跨平台的层次结构和类可以在不同版本之间进行大量更改,以实现最佳架构。
  8. 抱歉我的英语 - 不是母语(俄语)!

答案 10 :(得分:-1)

  1. 制作针对OSX / Linux的C / C ++ / Delphi编译器
  2. 制作可以提升的C / C ++编译器
  3. 编写新的VCL-Presentation Foundation(VGScene / WPF等) 它不应该落后兼容! Delphi IDE应该是 用这样的VCL-PF写的
  4. 组件库应保持原样(但具有改进的数据绑定)
  5. 仅为Win64提供64位VCL
  6. 这是一个问题吗?