如何将delphi tframe从dll加载到delphi应用程序

如何将delphi tframe从dll加载到delphi应用程序,delphi,dll,tframe,Delphi,Dll,Tframe,我已经用tframe创建了一个dll。 如何在我的应用程序中加载它,我不喜欢使用BPL,我只想用我的应用程序分发exe和DLL,因为BPL是一个DLL,采用BPL的方式:容易得多。由于BPL是一个DLL,采用BPL的方式:容易得多。这是可以做到的,但要让它在没有错误或内存问题的情况下工作,这是一项艰巨的工作。更糟糕的是,您将在应用程序中使用两个VCL,一个在可执行文件中,另一个在DLL中。您的框架将尝试引用DLL VCL,它将提供与EXE VCL非常不同的信息。尤其是在检查全局屏幕和应用程序变量

我已经用tframe创建了一个dll。
如何在我的应用程序中加载它,我不喜欢使用BPL,我只想用我的应用程序分发exe和DLL,因为BPL是一个DLL,采用BPL的方式:容易得多。

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

这是可以做到的,但要让它在没有错误或内存问题的情况下工作,这是一项艰巨的工作。更糟糕的是,您将在应用程序中使用两个VCL,一个在可执行文件中,另一个在DLL中。您的框架将尝试引用DLL VCL,它将提供与EXE VCL非常不同的信息。尤其是在检查全局屏幕和应用程序变量时。
不过,框架只不过是一个特殊的窗口控件,就像窗体一样。您可以从DLL中导出一个函数,该函数将返回TFrame类型的值。您的应用程序将能够调用此函数,从而创建帧,并以任何方式使用它来使用所有其他帧。不过,它不会包含任何关于框架内其他功能的特定信息。
下一步需要处理的是同步EXE和与VCL相关的DLL之间的数据。那不太漂亮。另外,在使用tab键通过屏幕上的控件进行tab操作时,可能会出现一些问题,因为tab键无法在框架外进行tab操作。您还会注意到一些类似的奇怪现象。
我开发了一个简单的应用程序,它以这种方式使用框架。我和另外两个人花了两个月的时间找到了一些可行的解决方案,这些解决方案在没有内存泄漏和其他问题的情况下运行良好。在我们开始那个项目之前,这似乎是个好主意。后来,我们决定它不是我们想要的解决方案,所以我们将DLL的代码与可执行文件的代码合并,只创建一个可执行文件。那样更好。

不过,我们确实使用了另一种选择。我们开始在mainform中使用webbrowser组件。DLL将包含一个格式良好的HTML页面,以及一组在使用特定函数时调用的方法。我们在一个简单的测试应用程序中进行了这项工作,并取得了良好的效果,但随后该公司进入了第11章。。。我的雇主破产了,因为与某个客户的交易严重失败,给公司留下了巨额债务。因此,一个有趣的项目结束了…

这是可以完成的,但要让它在没有错误或内存问题的情况下正常工作,这是一项非常艰巨的工作。更糟糕的是,您将在应用程序中使用两个VCL,一个在可执行文件中,另一个在DLL中。您的框架将尝试引用DLL VCL,它将提供与EXE VCL非常不同的信息。尤其是在检查全局屏幕和应用程序变量时。
不过,框架只不过是一个特殊的窗口控件,就像窗体一样。您可以从DLL中导出一个函数,该函数将返回TFrame类型的值。您的应用程序将能够调用此函数,从而创建帧,并以任何方式使用它来使用所有其他帧。不过,它不会包含任何关于框架内其他功能的特定信息。
下一步需要处理的是同步EXE和与VCL相关的DLL之间的数据。那不太漂亮。另外,在使用tab键通过屏幕上的控件进行tab操作时,可能会出现一些问题,因为tab键无法在框架外进行tab操作。您还会注意到一些类似的奇怪现象。
我开发了一个简单的应用程序,它以这种方式使用框架。我和另外两个人花了两个月的时间找到了一些可行的解决方案,这些解决方案在没有内存泄漏和其他问题的情况下运行良好。在我们开始那个项目之前,这似乎是个好主意。后来,我们决定它不是我们想要的解决方案,所以我们将DLL的代码与可执行文件的代码合并,只创建一个可执行文件。那样更好。

不过,我们确实使用了另一种选择。我们开始在mainform中使用webbrowser组件。DLL将包含一个格式良好的HTML页面,以及一组在使用特定函数时调用的方法。我们在一个简单的测试应用程序中进行了这项工作,并取得了良好的效果,但随后该公司进入了第11章。。。我的雇主破产了,因为与某个客户的交易严重失败,给公司留下了巨额债务。于是一个有趣的项目结束了……

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