2010-10-21 79 views

回答

5

由于BPL是一个DLL,去BPL方式:更容易。

+0

同意。 BPL具有原生VCL支持,而普通DLL不支持。在非BPL DLL边界上传递VCL对象并不是一个好主意。 – 2010-10-21 19:34:59

+1

我尝试了BPL的方式,但它并不像我想的那么容易。其实我需要一个“单个文件包”的方法,这在BPL情况下是不可行的。所以我正在制作DLL插件。 – Paul 2017-02-22 13:24:19

0

它可以完成,但它是一个工作的地狱,让它工作没有错误或内存问题。更糟糕的是,您将在应用程序中使用两个VCL,一个在可执行文件中,另一个在DLL中。你的框架会尝试引用DLL VCL,它将提供与EXE VCL完全不同的信息。特别是在检查全局屏幕和应用程序变量时。
尽管如此,框架只不过是一种特殊的窗口控件,就像窗体一样。你可以从DLL中导出一个函数,它会返回一个TFrame类型的值。你的应用程序可以调用这个函数,从而创建框架,以任何方式使用它,使用所有其他框架。尽管如此,它不会在框架中提供有关附加功能的任何特定信息。
接下来要处理的事情是同步EXE和VCL相关的DLL之间的数据。这不是很漂亮。另外,使用Tab键通过屏幕上的控件选项卡时,您可能会遇到一些问题,因为Tab键将无法在框架外标签。你会注意到更多这样的怪事。
我一直在使用这种方式使用框架的简单应用程序。我和另外两个人花了两个月时间得到了一些工作解决方案,这种解决方案在没有内存泄漏和其他问题的情况下工作得很好。在我们开始这个项目之前,这似乎是一个好主意。之后,我们决定它并不是我们想要的解决方案,所以我们将DLL的代码与可执行代码合并为一个可执行文件。这样更好。
虽然我们确实使用了另一种替代方法。我们开始在mainform中使用webbrowser组件。该DLL将包含一个HTML页面,很好地格式化,以及一些在使用某些特定功能时将被调用的方法。我们在一个简单的测试应用程序中工作,并取得了良好的效果,但随后公司开始了第11章的工作......我的雇主因与某些客户的交易不当而陷入了僵局,给公司带来了巨额债务。因此一个有趣的项目结束了......