【问题标题】:how to load delphi tframe from dll to delphi application如何将delphi tframe从dll加载到delphi应用程序
【发布时间】:2011-04-28 16:27:28
【问题描述】:

我用 tframe 创建了一个 dll。 如何在我的应用程序中加载它,我不喜欢使用 bpls,我只想在我的应用程序中分发 exe 和 dll

【问题讨论】:

    标签: delphi dll tframe


    【解决方案1】:

    由于 BPL 是一个 DLL,因此采用 BPL 方式:容易得多。

    【讨论】:

    • 同意。 BPL 具有普通 DLL 所没有的本机 VCL 支持。跨非 BPL DLL 边界传递 VCL 对象不是一个好主意。
    • 我尝试了 BPL 的方式,但它似乎并不像我想象的那么容易。实际上,我需要一种“每个包一个文件”的方法,这在 BPL 情况下是无法实现的。所以我正在制作 DLL 插件。
    【解决方案2】:

    可以做到,但要让它在没有错误或内存问题的情况下正常工作是一项艰巨的工作。更糟糕的是,您将在应用程序中使用两个 VCL,一个在可执行文件中,另一个在 DLL 中。您的框架会尝试引用 DLL VCL,这将提供与 EXE VCL 截然不同的信息。特别是在检查全局 Screen 和 Application 变量时。
    尽管如此,框架只不过是一个特殊的窗口控件,就像窗体一样。您可以从 DLL 中导出一个函数,该函数将返回 TFrame 类型的值。您的应用程序将能够调用此函数并因此创建框架,以任何方式使用它,它使用所有其他框架。但是,它不会包含有关框架内附加功能的任何具体信息。
    接下来您必须处理的是同步 EXE 和与 VCL 相关的 DLL 之间的数据。那不是很漂亮。另外,当使用 tab 键在屏幕上的控件之间切换时,您可能会遇到一些问题,因为 tab 键将无法在框架外切换。你会注意到更多这样的怪事。
    我研究过一个以这种方式使用框架的简单应用程序。我和另外两个人花了两个月的时间找到了一些可行的解决方案,它确实运行良好,没有内存泄漏和其他麻烦。在我们开始那个项目之前,这似乎是一个好主意。之后,我们认为它不是我们想要的解决方案,所以我们将 DLL 的代码与可执行文件的代码合并,只创建一个可执行文件。这样更好。
    不过,我们确实使用了另一种选择。我们开始在主窗体中使用 webbrowser 组件。 DLL 将包含一个 HTML 页面,格式很好,以及在使用某些特定函数时会调用的一堆方法。我们在一个简单的测试应用程序中进行了这个工作,结果很好,但后来公司进入了第 11 章……我的雇主破产了,因为与一些客户的交易严重失败,让公司背负了巨额债务。一个有趣的项目就这样结束了……

    【讨论】:

      猜你喜欢
      • 2011-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-07
      • 1970-01-01
      • 2014-06-01
      • 1970-01-01
      相关资源
      最近更新 更多