【问题标题】:My Delphi 2009 app fails to run on Win95我的 Delphi 2009 应用程序无法在 Win95 上运行
【发布时间】:2010-12-30 12:44:59
【问题描述】:

我在 Delphi 2009 中创建了一个小型应用程序。在这里我遇到了问题,当我在 WindowsXP 中运行我的应用程序时,它可以正常工作,但在 Windows95 中无法正常工作。我知道 95 不支持 Unicode 的问题。如果有人知道解决方案,请告诉我。而且我还有一个想法是将Unicode转换为ASCII。有没有可能请告诉怎么做。

提前致谢

蠕虫问候, 尤瓦拉杰

【问题讨论】:

  • 如果你也想支持windows 95,你应该首先检查操作系统是什么版本,根据你使用某些方法等的操作系统版本。
  • 到底谁还在用Windows 95?如果你真的想支持 Win 95 那么你应该试试 Delphi 6/7。
  • 取决于应用程序和工作性质(您是否签订了生产在“所有窗口”上运行的商业应用程序的合同?或者您正在编写一个 iTunes-killer 共享软件应用程序?),你最好忽略Win9x。 9x 用户不太可能购买新软件,他们不太可能升级。所以成本/收益比表明,如果它引起头痛,你应该跳过这个平台。
  • @David - 谁使用 Win95 真的很重要吗?显然有些人会这样做(有传言说,它仍然有效!) - 厌恶有些人没有机械地喂 $$ 机器,即软件升级周期不会改变那些必须为那些必须提供软件的人的事情用户。 :)
  • @Deltics:实际上有相当多的 Win 9x 平台,我读过,做专门的事情。毫无疑问,仍有不少人使用它们。然而,他们用它们做的事情与五到十年前完全相同,并且没有花费数百美元来运行更现代的软件。这意味着如果您想通过向他们出售商品来赚钱,他们就不是一个好的目标市场。这就是为什么当 PPC 出现时供应商很快停止支持基于 680x0 的 Mac,而且当时更换成本更高。

标签: delphi unicode delphi-2009


【解决方案1】:

Delphi 2009 生成了进行 Unicode 函数调用的应用程序。你无法改变这一点。这不是将您的 unicode 字符串转换为 ascii 的问题。如果您希望您的应用程序在 Win95 上运行,您需要 Delphi 2007 或更早版本。

【讨论】:

  • 关于将 MSLU 与 unicode Delphi 版本生成的应用程序一起使用有什么已知的吗?
  • Delphi 2009 的全部要点是迁移到 Unicode 从根本上要求他们放弃与非 unicode Windows 版本 (Win9x) 的兼容性。
【解决方案2】:

Microsoft 专门为此目的开发了 Microsoft Layer for Unicode(简称 MSLU):在 Win95 等系统上运行针对 UNICODE 版本的 Win32 API 的应用程序,而无需更改它们。它通过拦截和转发调用来实现这一点。

不幸的是,MSLU 默认以 VC++ 库的形式提供。 Rob Kennedy 几年前制作了一个 Delphi 端口,可用 here,针对 Delphi 2005。我想为 D2009 重写东西会有点工作,但可行。

另一个缺陷是 MSLU 技术有点过时,可能无法涵盖 API 的所有 Delphi 用途。我想找出答案的唯一方法是实际继续尝试看看它是否有效。

【讨论】:

  • 据我了解,MSLU 为 API 函数调用提供了一个层,但不为消息提供层。因此,向控件发送包含文本的消息将无法正常工作,这将影响某些 GUI 元素。所以 MSLU 不是一个选择,真的。
  • 我认为 Rob 对 MSLU 所做的事情与此无关。
  • 我不会做出任何承诺,但我并不完全相信 MSLU 行不通。 @Eugene,MSLU 替换了 CreateWindowExWSendMessageWCallWindowProcW,所以我认为它应该处理短信。我主要担心的是,现在的 API 函数比 2001 年发布 MSLU 时要多得多。另一方面,Andreas Hausladen says 他可以“如果我修改 System.pas,则可以使用 Delphi 2010 瞄准 Windows 95”,所以这可能只是避免调用任何新 API 的问题。看来值得一试。
  • @Rob 我同意这值得一试,但是当我(早在 2001-2002 年)查看 Delphi 的 unicode 库的作者试图做什么时(该产品的名称是什么?忘记了...),这不仅仅是在调用 API 函数之前将 Unicode 转换为 ANSI。他必须实施某些技巧才能使标准控件正常工作。
  • @Eugene,我认为您指的是 Tnt 库。那没有使用MSLU。它还试图使 WideString VCL 属性与它们的 AnsiString 对应物保持同步,这需要覆盖和修补各种非 API 函数。用户将编写 Unicode 代码,而 Tnt 使它与底层的非 Unicode VCL 一起工作。我假设 Yuvaraj 会编写 Unicode 代码,所以他的代码和 VCL 之间没有像 Tnt 时代那样的兼容性问题。
【解决方案3】:

出现在 D2009 中的 Unicode VCL 不能在 Windows 9x 上使用。

【讨论】:

    猜你喜欢
    • 2010-11-16
    • 2016-02-07
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2017-05-17
    • 1970-01-01
    • 2022-07-05
    相关资源
    最近更新 更多