我将我的项目移动到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然后退出我的应用程序。谁能告诉我我做错了什么?
答案 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文件,你就会知道为了真正启动一个应用程序需要做些什么。