【发布时间】:2016-01-30 21:44:08
【问题描述】:
我有一个包含多个表单的 dll 文件。
我在加载此 dll 的控制台应用程序中引用了 main 函数。
我想隐藏 dll 文件的主要形式,但到目前为止所有尝试都没有成功。
我为此尝试了几种方法,但除了从任务栏隐藏之外,我尝试过的方法都没有。
这是我的代码:
dll 上的主窗体
unit Conectar;
interface
uses
Windows, Messages, SysUtils, Classes {.......};
type
TForm1 = class(TForm)
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure CreateParams(var Params: TCreateParams); override;
end;
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
params.exstyle := params.exstyle and not WS_EX_APPWINDOW or WS_EX_TOOLWINDOW;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
ShowWindow(Form1.Handle,SW_HIDE);
end;
DLL
library DLL;
uses
System.SysUtils,
Conectar,
vcl.Forms,
Classes;
{$R *.res}
procedure ShowDllForm; stdcall;
begin
Form1 := TForm1.Create(nil);
try
Form1.ShowModal;
finally
FreeAndNil(Form1);
end;
end;
exports
ShowDllForm;
begin
end.
控制台应用程序
{$APPTYPE GUI}
var
Msg: TMsg;
procedure ShowDllForm;stdcall;
external 'DLL.dll' name 'ShowDllForm';
begin
CoInitialize(nil);
ShowDllForm;
CoUninitialize;
end.
【问题讨论】:
-
如果你想隐藏它,为什么要显示它?
-
嗯...不要打电话给
ShowDllForm? (顺便说一句,您的问题很有趣。如何显示来自 DLL 的表单?,然后是 如何不显示来自 DLL 的表单?,在一对夫妇中几个小时。接下来是什么?) -
@KenWhite,关于我的最后一个问题,有必要执行
Form1(主表单),因为我的软件工作正常。但是现在,我想执行,但没有用户可以看到这个表单。所以,你有一些解决这个问题的建议(或尝试解决),朋友?如果没有显示此表格,我的软件将无法运行。因为dll文件中的其他表单依赖于这个主表单。 -
隐藏 dll 文件的表单比 VCL 表单更难:-(。我不知道该怎么做。
-
是的,我有一些建议。如果您的应用程序依赖于 GUI,请不要将其设为控制台应用程序。如果没有,请不要包含 GUI 窗口。如果它需要在后台运行,请将其设为服务。如果您需要一个 UI 来控制该服务,请将其编写为一个单独的应用程序并使用进程间通信让它们相互交谈。除此之外,完全不清楚您要做什么,如果没有更多信息,我将无法提供任何帮助;你的整个设计在我看来都是错误的。