【问题标题】:PostMessage / SendMessage in Cross-Platform Delphi?跨平台Delphi中的PostMessage / SendMessage?
【发布时间】:2011-03-29 16:10:14
【问题描述】:

对于跨平台开发,我不确定需要什么才能使 Delphi 代码跨平台使用 PostMessage 和 SendMessage 调用进行进程内和进程间通信,因为关于 Delphi 的新运行时库的信息很少。

网上有相当多的 Delphi 代码示例使用 Windows 消息队列进行编程任务(例如在线程通信领域),这可能对跨平台开发人员毫无用处。

没有模拟层将旧的特定于操作的消息发送代码映射到跨平台解决方案的可能性有多大?应用程序开发人员现在是否应该通过更适合跨平台操作的新消息实现来审查现有代码?

【问题讨论】:

  • 说实话,如果没有 Windows API,我完全不知道如何编写非平凡的应用程序。 Windows 消息处理系统只是 API 的一部分。今天的 VCL 和 RTL 中的“一切”都基于 Windows API,因此甚至很难推测跨平台的 VCL/RTL 应该如何工作。
  • @Andreas RTL 和 VCL 在很大程度上隐藏了 Windows 内部,这可以为跨平台打下坚实的基础(不确定我是否可以在这里提到 Lazarus 作为一个很好的例子)
  • 这是任何人的猜测。我的猜测是在不同的平台上会有不同的框架。我敢打赌,SendMessage 和 PostMessage 在非 Windows Delphi 上不存在。如果你想写跨平台,那就选择 Qt、wxWidgets 等。
  • 不应该太难以推测,@Andreas。我们已经看过两次了。 CLX 是如何工作的?拼箱如何运作?
  • “CLX 是如何工作的?”不太好。

标签: delphi winapi cross-platform


【解决方案1】:

PostMessage 和 SendMessage 是特定于 Windows 的 - 它们是 Windows API 的一部分。如果您的程序使用它们,那么它不是跨平台的。您可能应该重写使用这些函数的代码。

【讨论】:

    【解决方案2】:

    其他操作系统可能根本没有消息队列。必须隔离或删除 Windows 特定代码才能构建跨平台应用程序。他们为 Kylix 编写 CLX 库的原因之一是 VCL 受 Windows 限制,无法轻松转换为跨平台库。

    【讨论】:

      【解决方案3】:

      我怀疑您可以实现自己的 Queue 对象,该对象可以以特定于平台的方式实现。在 Win32 中,它可以包装一个底层的 Win32 窗口句柄,而在某些其他平台中,可能会消耗一些其他资源。

      如果您现在就开始,通过将特定于平台的代码减少到封装您需要的功能的特定单元,会怎样。这意味着您需要避免使用 PostMessage/SendMessage 作为您直接使用的机制。

      首先,假设 PostMessage 和 SendMessage 不存在,您需要一种方法来创建队列。例如,您可以使用大多数平台上存在的套接字或命名管道。您需要编写更多代码才能做到这一点。

      在 QT 库上,它们提供了自己的功能来帮助应用程序作者重写他们的 C++ 应用程序以使用它们的函数而不是 Win32 函数,因此您也可以尝试这种方法。 QT 函数postEvent 就是一个例子。 QT 还提供了信号和槽,这是在其框架中进行通知的更惯用的方式。

      也许在跨平台 Delphi 出现的任何新框架中执行通知的方式可能包含一种全新的执行方式。这就是我的希望。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-22
        • 2011-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-02
        相关资源
        最近更新 更多