2010-01-16 3 views
0

я переехал мой проект в DLL и там я объявлена ​​процедура, как этотход проекта в 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, а затем выходит из моего приложения. Может ли кто-нибудь сказать мне, что я сделал неправильно?

ответ

3

Ваша процедура в dLL показывает немодальную форму, в вашем приложении-получателе у вас нет кода для цикла сообщений, если вы посмотрите на файл DPR, созданный Delphi для приложения формы VCL, вы увидите код похож на этот:

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

этого код инициализирует приложение, создает форму, а затем запускает цикл обработки сообщений, и это сообщение итерации и процессы цикла принятых сообщений, пока приложение не будет прекращено.

В вашем коде вы только что создали часть создания формы, а не остальную часть. Вы можете использовать приведенный выше код в своем собственном коде и заменить Application.CreateForm своим собственным кодом создания формы.

Другой вариант - показать вашу форму внутри DLL как модальную форму. В этом случае ваша форма будет оставаться на экране до тех пор, пока не будет закрыта:

MyForm.ShowModal; 

Также, пожалуйста, обратите внимание, что в текущем объекте кода приложения в вашей DLL не обязательно относится к объекту Application в приложении вызывающего абонента, если вы отправляете Application.Handle из приложения-получателя в DLL.

Это лучше, что вы изменить процедуру DLL в код, как это:

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

С уважением

+0

спасибо, я только что изменил процедуру StartApp, я изменил Show to ShowModal и в основной программе (dpr) я просто поместил StartApp, и он отлично работает. BTW это нормально, если я удалил приложение. * Процедуры, он отлично работает без них. –

1

Вы на самом деле не создали приложение, вы создали форму. Ваша DLL показывает эту форму, а затем заканчивается, так что это все, что происходит. Если вы начнете нормальный проект и откроете файл .dpr, вы получите представление о том, что должно произойти, чтобы начать приложение.

+0

, если я создать форму в главном проекте и откройте оттуда формы из DLL, то я У меня две формы. Я попытался установить mainForm.visible: = false, но он по-прежнему показывает –

Смежные вопросы