Your procedure in the dLL is showing a non-modal form, in your caller application you do not have any code for message loop, if you look at a DPR file created by Delphi for a VCL form application, you will see a code similar to this:
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
This code initializes the application, creates the form, and then runs the message loop, and this message loop iterates and processes received messages until your application is terminated.
In your code, you just did the form creation part, not the rest of it. You can have the above code in your own code and replace Application.CreateForm with your own form creation code.
Another option is to show your form inside DLL as a modal form. In that case, your form will remain on the screen until you close it:
MyForm.ShowModal;
Also please take note that in your current code Application object in your DLL does not necessarily refer to Application object in your caller application, unless you send Application.Handle from caller application to the DLL.
It is better that you change your DLL procedure to a code like this:
procedure StartApp;
begin
with TMyForm.Create(nil) do
try
ShowModal;
finally
Free;
end;
end;
Regards