有没有办法使用 dwscript 作为 Delphi 应用程序的插件框架?例如,我在 dwscript 中有一个添加数字的简单方法,这需要从托管应用程序中调用。
一种解决方案是将 dwscript 保留为文本文件并在运行时加载文本文件并从主机调用该方法。有没有办法创建一个包含 dwscript 的 dll 并在运行时加载 dll 然后调用该方法?
DWS 不创建 DLL。它将帕斯卡风格的源代码编译为中间文件以供执行,因此您可以根据需要将文本文件部署为插件。例如,回调到您的 DWS 源下载并在 DWS 站点的工具目录中运行 IDE 演示,这有一个“执行过程”菜单选项和简单的源代码来查看它是如何完成的。
应该没有问题,不过你还是先看看delphi里面怎么管理dll插件吧,因为ethere有一些限制:
查看 delphi.about.com 有一些教程。 http://delphi.about.com/od/windowsshellapi/a/dll_basics.htm
您首先会发现的问题之一是您可能会遇到类问题,因为 DLL 就像一个独立的应用程序,因此它会创建自己的类表。因此,对于主机应用程序,dll 中包含的 TDWScript 类是与其包含的类(主机)不同的类。
有一些方法可以实现,这取决于您的需求:
1) 例如,您可以调用 DLL 方法,而不是直接调用 TDWscript 类,只调用像 'ExecuteScript(afilename)' 这样的方法
2)如果您的插件需要与主机应用程序交互,那就更复杂了,因为您必须建立一个通信协议以便两者(主机和插件可以交互)
选项是: a) 直接使用接口而不是类。b) 使用内存管理器,如 sharemem(delphi 附带)或 fastMM4(开源),它们应该包含在 bot DLL 和 APP 中,因此它们将共享相同的内存管理器和相同的类表。
如果您是插件新手,请查看 JEDI VCl 组件,那里有 JvPlugin 和 JvPluginManager,它是一个简单但功能强大的框架,可以开始创建您自己的插件框架。有一些关于如何管理插件的演示,使用 DLL 方式创建它们。这可能对你想要的有用。以及如何使用接口而不是直接使用类的演示。