【发布时间】:2017-12-26 17:29:59
【问题描述】:
当创建一个新表单时,Delphi 期望“Application”、“self”或“nil”作为定义所有者的参数。但是当表单位于 dll 而不是独立 (vcl) 应用程序中时会发生什么?显然,'nil' 由 dll 中编写的代码处理。但是,如果表单是在 dll 中创建的,我不清楚“Application”或“self”是否会正确处理“form.free”操作。如果是这样,表格是否被释放?
【问题讨论】:
-
预计在 DLL 中实现 VCL 表单将面临更大的挑战。
Application将与应用程序中的不同。 -
"Delphi 期望 'Application'、'self' 或 'nil' 作为定义所有者的参数" - 它没有这样的期望。您可以使用any
TComponent对象作为Owner,如果不是nil。但是,如果您确实指定了nil,则您有责任在使用完毕后自行释放创建的对象。 -
为什么会有人想要在(普通)DLL 中实现表单?为此,包 (BPL) 更适合。 DLL 不会遇到任何问题。
-
@rudy 有时候。例如,假设您为办公应用编写了一个 COM 插件。
-
@rudy 该 dll 用作图形 CAD 程序的宏扩展。宏可以使用弹出表单来管理从程序中提取的数据并定义新实体以添加到绘图文件中。 Delphi 软件包无法识别。 dll 由 Cad 程序操作,仅导出一个名为“名称”的函数。