【问题标题】:ShareMem/ string-exchanging with Delphi DLLShareMem/ 与 Delphi DLL 进行字符串交换
【发布时间】:2009-12-13 18:17:20
【问题描述】:

我希望快速 - 我正要深入研究一个 Delphi 5 遗留应用程序,该应用程序调用一个 DLL(也是用 D5 编写的),传递一个字符串,如果需要,DLL 可以修改该字符串。

我有 DLL 和应用程序的代码。在 DLL 源代码的顶部粘贴了关于使用 ShareMem 的备注,并且它需要是项目的 uses 子句中的第一行等。

如果我将整个内容移植到 D2007,是否有更好(或更现代)的方式让 Delphi 应用程序与 Delphi DLL 共享字符串数据? D5 ShareMem 的东西是否仍然适用于 Delphi 2007 应用程序(使用 FastMM 等)?我什至还没有重新编译整个事情的 bash - 只是想知道这是否会成为一个问题,是否有替代/推荐的方式来做到这一点?

FWIW,DLL 完全是第一方的(它只被这个特定的应用程序使用 - 所以在 D2007 下重新编译它也不会有问题)。

【问题讨论】:

    标签: delphi dll delphi-2007


    【解决方案1】:

    要使用 D2007 随附的 FastMM,请将 SimpleShareMem 用作您的应用程序和 DLL 项目中的第一个单元。

    或从 SourceForge 下载完整的 FastMM4,在 FastMM4Options.Inc 中设置标志(ShareMM、ShareMMIfLibrary、AttemptToUseSharedMM),并将 FastMM4 作为应用程序和 DLL 项目中的第一个单元。

    【讨论】:

    • 太棒了。我会尝试后者——我曾经将完整的 FastMM4 与 Delphi 7 一起使用,并发现其中的一些技巧非常宝贵。谢谢!
    【解决方案2】:

    仅使用 FastMM4。 FastMM4 是一款出色的内存管理器,并自动包含类似 ShareMem 的解决方案! FastMM4 兼容 D5 及更高版本!

    【讨论】:

    • fastmm 只解决了一个特定的情况,它不是一个完整的 sharemem (COM memmgr) 替代品。承认这种情况在这里适用。
    • 但仅适用于默认的 FASTMM4 开关设置?
    【解决方案3】:

    您需要 sharemem 的原因是 ansistrings 上的引用计数在传递给 dll 时会中断。一种解决方案是:-

    如果您能够将字符串限制为 shortstring,那么您可以省去 sharemem。我已经编写了大约两打 dll,主要是硬件驱动程序,而且我不必使用一次 sharemem。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 2010-09-23
      • 1970-01-01
      • 2021-12-01
      • 2016-01-27
      • 1970-01-01
      相关资源
      最近更新 更多