Delphi:如果应用程序为 nil(在 dll 中),如何获取 Application.MainForm
Delphi: How to get Application.MainForm if the Application is nil (in dll)
我需要应用程序的主窗体来执行 ClientToParent()
但没有成功,因为我在一个 dll 中并且 Application 变量为 nil。我感谢任何人的帮助。
您不能对跨模块边界的表单引用执行任何操作。主机应用程序,即使假设它是一个 Delphi 应用程序,也有一个不同的 VCL 实例。因此,您不能在 DLL 中使用应用程序中的 TForm
实例。如果您使用的是软件包,则可以这样做。
您或许可以枚举顶层 windows 并在您的进程中找到那个。那可以工作但是很乱。
公开功能以允许主机提供此类服务要好得多。当主机加载您的 DLL 时,它会提供一个提供必要服务的接口。它可以根据您的需要转换坐标,并可能提供其他服务。
我想问的一件事是你打算打电话给 ClientToParent
。这表明您在不同模块中的控件之间存在 client/parent 关系。这只有在您使用包时才可行。我想知道您是否完全了解与跨模块使用 VCL 相关的限制。
我需要应用程序的主窗体来执行 ClientToParent()
但没有成功,因为我在一个 dll 中并且 Application 变量为 nil。我感谢任何人的帮助。
您不能对跨模块边界的表单引用执行任何操作。主机应用程序,即使假设它是一个 Delphi 应用程序,也有一个不同的 VCL 实例。因此,您不能在 DLL 中使用应用程序中的 TForm
实例。如果您使用的是软件包,则可以这样做。
您或许可以枚举顶层 windows 并在您的进程中找到那个。那可以工作但是很乱。
公开功能以允许主机提供此类服务要好得多。当主机加载您的 DLL 时,它会提供一个提供必要服务的接口。它可以根据您的需要转换坐标,并可能提供其他服务。
我想问的一件事是你打算打电话给 ClientToParent
。这表明您在不同模块中的控件之间存在 client/parent 关系。这只有在您使用包时才可行。我想知道您是否完全了解与跨模块使用 VCL 相关的限制。