2010-01-16 5 views
0

je me suis déplacé mon projet dans une DLL et là, je déclare une telle procédureprojet de déménagement dans dll

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

exports StartApp; 

mon application principale contient un fichier DPR contenant:

procedure StartAPP; external 'myDLL.dll'; 

begin 
    StartAPP; 
end; 

quand je lance mon projet il ouvre myForm et puis il quitte mon application. Quelqu'un peut-il me dire ce que j'ai mal fait?

Répondre

3

Votre procédure dans le dLL montre une forme non modale, dans votre application de l'appelant vous n'avez aucun code pour la boucle de message, si vous regardez un fichier DPR créé par Delphi pour une application de formulaire VCL, vous verrez un code similaire à ceci:

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

ce code initialise l'application, crée la forme, et puis exécute la boucle de message, et cette boucle itère de message et les processus messages reçus jusqu'à ce que votre application est terminée.

Dans votre code, vous venez de faire la partie création de formulaire, pas le reste. Vous pouvez avoir le code ci-dessus dans votre propre code et remplacer Application.CreateForm avec votre propre code de création de formulaire.

Une autre option consiste à afficher votre formulaire dans DLL en tant que formulaire modal. Dans ce cas, votre formulaire restera à l'écran jusqu'à ce que vous fermiez:

MyForm.ShowModal; 

s'il vous plaît prendre note également que dans votre code actuel objet Application dans votre DLL ne se réfère pas nécessairement à l'objet d'application dans l'application de l'appelant, à moins que vous envoyez Application.Handle de l'application appelant à la DLL.

Il est préférable de changer votre procédure de DLL à un code comme ceci:

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

Cordialement

+0

merci, je viens de modifier la procédure StartApp, j'ai changé Show en ShowModal et dans le programme principal (dpr) je viens de mettre StartApp et ça marche bien. BTW est-il ok si j'ai enlevé des procédures d'application. *, Cela fonctionne bien sans eux. –

1

Vous n'avez pas écrit d'application, vous avez créé un formulaire. Votre DLL affiche ce formulaire puis se termine, c'est tout ce qui se passe. Si vous démarrez un projet normal et ouvrez le fichier .dpr, vous aurez une idée de ce qui doit se passer pour démarrer une application.

+0

si je crée une forme dans le projet principal et ouvert à partir de là la forme de la dll puis i Je vais avoir deux formes. J'ai essayé de mettre mainForm.visible: = false mais il montre encore –

Questions connexes