代码之家  ›  专栏  ›  技术社区  ›  Mihaela

在Delphi中不使用套接字进行应用程序数据交换的最佳方法是什么?

  •  6
  • Mihaela  · 技术社区  · 17 年前

    8 回复  |  直到 17 年前
        1
  •  5
  •   Vivian Mills    17 年前

    除了你已经拥有的:
    动态数据交换
    内存映射文件(MMF)

    您可以下载几个免费的MMF组件, MapFiles.zip

    Torry's

    最终的解决方案可能取决于数据传输的数量、大小和频率,这些决定了您选择哪种选项。

        2
  •  4
  •   Stijn Sanders    17 年前

    我建议在这种情况下使用COM。(注意:不是COM+,不是ActiveX,不是OLE;COM,只是COM。)

    从Delphi 7(或更早的版本,我不确定)开始,通过向项目中添加一个类型库和一个Automation对象,可以很容易地完成这项工作。

    我遇到的唯一缺点可能是线程问题,在正常应用程序中 CoInitialize(nil); 在应用程序启动时,在更复杂的应用程序中,您需要考虑“线程单元”或使用自由线程并执行自己的锁定。(在某些情况下,你已经在做了。)

        3
  •  2
  •   CessnaPilot    17 年前

    不太优雅,而且它确实使用了很多开销,但如果你的应用程序已经具有数据感知能力(即有一个数据库作为其中的一部分),那么使用一两个表传递信息就很容易了。

        4
  •  2
  •   dummzeuch Stijn Sanders    17 年前

    当然,这并不是真正的高性能。

        5
  •  1
  •   otherchirps    17 年前

    我再次投票支持命名管道和数据交换。比起mmap文件,我更喜欢它们,因为win32管道API为您提供了一些开箱即用的好选择:同步/异步、字节流与消息包、简单的ReadFile/WriteFile调用。所有你 可以 用mmaps做你自己。..但管道已经在那里了。..

    您可以使用安全属性来控制访问,这在WM_CopyData中不是一个选项。这可能不会立即成为问题。..但即使你不在乎谁发送你的应用程序消息,拥有这个选项也很方便。对我来说,当Vista出现时,这很有帮助,突然之间,用户应用程序在我的服务中以单独的会话运行。调整安全属性是让事情再次正常工作的唯一方法,这很好。

    对于“发起行动”,你可能能够像一些命名的事件一样简单地逃脱惩罚,而根本不用担心发送消息?有关各方只是等待信号。

        6
  •  0
  •   André    17 年前

    不要使用COM,开销太大(变体),你必须注册.dll或.exe(这会带来很多奇怪的安装+更新问题)。

    我应该选择MMF,我使用它与Windows服务进行通信。 http://17slon.com/gp/gp/gpsync.htm

        7
  •  0
  •   tag tag    17 年前

        8
  •  -1
  •   Brian Frost    17 年前