将项目移动到DLL中

时间:2010-01-16 11:43:42

标签: delphi

我将我的项目移动到DLL中,并在那里我声明了一个像这样的程序

procedure StartApp;
var
   myForm : TmyForm;
begin
   myForm:=TmyForm.Create(Application);
   myForm.Show;
end;

exports StartApp;

我的主应用程序包含一个包含以下内容的dpr文件:

procedure StartAPP; external 'myDLL.dll';

begin
   StartAPP;
end;

当我运行我的项目时,它会打开myForm然后退出我的应用程序。谁能告诉我我做错了什么?

2 个答案:

答案 0 :(得分:3)

您在dLL中的过程显示非模态形式,在您的调用者应用程序中,您没有任何消息循环代码,如果您查看由Delphi为VCL表单应用程序创建的DPR文件,您将看到代码类似于:

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

此代码初始化应用程序,创建表单,然后运行消息循环,此消息循环迭代并处理收到的消息,直到您的应用程序终止。

在您的代码中,您只是创建了表单创建部分,而不是其余部分。您可以在自己的代码中包含上述代码,并将Application.CreateForm替换为您自己的表单创建代码。

另一种选择是将DLL中的表单显示为模式形式。在这种情况下,您的表单将保留在屏幕上,直到您关闭它:

MyForm.ShowModal;

另请注意,在当前代码中,DLL中的Application对象不一定引用调用者应用程序中的Application对象,除非您将来自调用者应用程序的Application.Handle发送到DLL。

最好将DLL过程更改为如下代码:

procedure StartApp;
begin
  with TMyForm.Create(nil) do
  try
    ShowModal;
  finally
    Free;
  end;
end;

此致

答案 1 :(得分:1)

您还没有真正编写过应用程序,而是创建了一个表单。你的DLL显示这个表单,然后结束,所以这就发生了。如果你启动一个正常的项目并打开.dpr文件,你就会知道为了真正启动一个应用程序需要做些什么。