Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.11;
Скачать: CL | DM;

Вниз

О загрузке dll в самом начале приложения....   Найти похожие ветки 

 
L@ti   (2007-01-18 10:33) [0]

Подскажите пожалуйста. Как правильно загружать DLL в начале...

program Balance;

uses
 Forms,
 uMain in "uMain.pas" {frmMain};

{$R *.res}

begin
 Application.Initialize;
 {Application.CreateForm(TfrmMain, frmMain);} //Главную форму нужно загружать после авторизации. Т.е. В DLL как раз и будет форма авторизации...
 Application.Run;
end.


Верней загружать динамически DLL я могу, предавая App главной формы, а вот выгрузить как??
Посылаю сообщение из DLL, типа PostMessage(Application.MainForm.Handle, WM_USER+ 99, 0 ,0)
Выдает ошибку типа, чему ты шлешь... Главная форма еще не создана...
Как быть???


 
Сергей М. ©   (2007-01-18 11:17) [1]


> В DLL как раз и будет форма авторизации


Это еще зачем ?
Чем не угодила форма авторизации в этом же exe-модуле ?


 
evvcom ©   (2007-01-18 11:21) [2]

> [1] Сергей М. ©   (18.01.07 11:17)
> Это еще зачем ?

Так, видимо, круче.
Понтовые перцы сейчас делают именно так :)


 
L@ti   (2007-01-18 11:23) [3]


> Сергей М. ©   (18.01.07 11:17) [1]

Дело в том, что эта форма должна зазываться в начале.. и при смене пользователя.. + эта форма будет использоваться и другим приложением (т.е. тоже выполлять роль авторизации.)


 
L@ti   (2007-01-18 11:25) [4]


> Понтовые перцы сейчас делают именно так :)

:))), данет... Уважаемый... Принцеп сохранения виртуальной памяти... :)))


 
Сергей М. ©   (2007-01-18 11:29) [5]


> L@ti   (18.01.07 11:23) [3]


Это не аргумент в пользу размещения формы в отдельной библ-ке.


> загружать динамически DLL я могу.. а вот выгрузить как?


Обычным способом - вызовом FreeLibrary().


 
Сергей М. ©   (2007-01-18 11:30) [6]


> Принцеп сохранения виртуальной памяти


Чушь откровенная)


 
L@ti   (2007-01-18 12:03) [7]


> Сергей М. ©   (18.01.07 11:29) [5]

Аргумент, аргумент...!
+ она также является и диалогом, ввода лицевых, сумм, периодов.. и еще парочку вещей...!

Хорошо... Здесь на счет FreeLibrary(), ты сумничал...
А теперь объясни мне Иванушке,  я что по-твоему должен загрузить DLL и  по окончанию .. в блоке finally, выгрузить...  Это ты Чушь говоришь...

+ Приложение пишется на сообщениях....
Так, что моя формачка авторизации после того как убедиться в достоверности логина и пароля, должна слать сообщение глав. фор. , типа все ОК! И тогда я создаю Application.CreateForm(TfrmMain, frmMain);


> Сергей М. ©   (18.01.07 11:30) [6]

А по поводу этого приведи аргументы мне на то что использовать DLL в случае:
1) Сама DLL с формой "представляет некий объем памяти", почти так-же как если бы она была частью глав. форм.
2) Гибкость изменения, дописания частей программы, а не лесть в ее дебри..
3) Эту DLL используют две программы.., а по мере возможно и три..


 
Юрий Зотов ©   (2007-01-18 12:31) [8]


program Balance;
...

type
 TFunc = function(...) : BOOL; stdcall;

var
 H: THandle;
 Func: TFunc;
 AutOK: boolean;
begin
 H := LoadLibrary(...);
 Pointer(Func) := GetProcAddress(...);
 AutOK := Func(...);
 FreeLibrary(...);
 if AutOK then
 begin
   Application.Initialize;
   Application.CreateForm(TfrmMain, frmMain);
   Application.Run
 end
end.


 
L@ti   (2007-01-18 12:56) [9]


> Юрий Зотов ©   (18.01.07 12:31) [8]

Вот спасибочки за идейку добрый человек.
Уважаю тех. Кто на вопрос кода. Отвечает кодом !


 
Сергей М. ©   (2007-01-18 13:07) [10]


> L@ti   (18.01.07 12:03) [7]



> является и диалогом, ввода лицевых, сумм, периодов.. и еще
> парочку вещей


Да хоть косой десяток "вещей")

Одну и ту же форму (pas+dfm) можно подключить к проекту любого приложения.

Не нравится ? Лень сделать батник, одним запуском которого пересобираются все проекты, ссылающиеся на эту форму ?

Что ж, аргумент в пользу внешнего модуля принимается. Только этот модуть должен быть пакетом времени выполнения (bpl), а не обычным (dll) модулем. Это нормальный и естественный для Делфи-приложений механизм, не требующий доступ к гландам через анус)

см. Load/UnloadPackage() - Борланд предоставил эти ф-ции не для Пушкина, а как раз для тебя и твоей задачи.


> на счет FreeLibrary(), ты сумничал


На каждый LoadLibrary() д.б. свой FreeLibrary() - и где тут "заумность" ?
А уж где и когда ты будешь вызывать FreeLibrary() - это решать тебе.


> Приложение пишется на сообщениях


По барабану на чем оно "пишется", если форма из DLL вызывается модально. Про модальность же или немодальность этой формы ты ни словом не обмолвился, а это крайне важно с т.з. времени и места вызова FreeLibrary().


> А по поводу этого приведи аргументы


Да что там приводить ?
Простое освобождение того или иного ВАП-региона (без явного последующего SetProcessWorkingSetSize) не ведет напрямую к немедленному изменению системой process working set size. Вот это и есть "принцип". А то что
ты написал в [4] - это словоблудие, демонстрирующее крайне слабое понимание тобой внутрисистемных механизмов распределения глоб.ресурсов и ресурсов процесса.


 
Сергей М. ©   (2007-01-18 13:18) [11]


> L@ti   (18.01.07 12:56) [9]


Оно тебе не подходит, ты же сам сказал про невозможность по неким таинственным причинам выгрузки тобой библиотеки.

Цитирую Иванушку:


> я что по-твоему должен загрузить DLL и  по окончанию .. выгрузить...  Это ты Чушь говоришь...


Сообщения какие-то тут же приплел)
Нет бы сразу сказать, мол, моя форма из dll вызывается в немодальном режиме, и на момент необходимости создания главной формы приложения эта немодальная  еще должна существовать, так что FreeLibrary() на этот момент пока невозможен.

Или все-таки модально ?
Тогда твоя проблема попросту высосана из пальца)


 
Desdechado ©   (2007-01-18 13:22) [12]

А что, динамическое связывание обязательно?


 
L@ti   (2007-01-18 13:24) [13]


> Только этот модуть должен быть пакетом времени выполнения
> (bpl), а не обычным (dll) модулем.

Согласен!
А с остальным нет!
И на счет На каждый LoadLibrary() д.б. свой FreeLibrary() это и дураку было понятно. Это равноситьно тому, что я вопрос по новой задам.
С уважением за помощь!


 
L@ti   (2007-01-18 13:28) [14]


> Desdechado ©   (18.01.07 13:22) [12]

Как бы задумано было так. Может с самого начала построения проекта, это и было ошибочным шагом...
Как бы поступили вы...?


 
Сергей М. ©   (2007-01-18 13:33) [15]


> Согласен!


Ну так и в чем же тогда дело ?)


> с остальным нет


С чем несогласен ? С тем что режим вызова тобой "библиотечной" формы в дан. случае имеет крайне важное значение ?


> На каждый LoadLibrary() д.б. свой FreeLibrary() это и дураку
> было понятно


Ну и какого же ляда, если понятно, ты при этом задаешь вопрос

> загружать динамически .. могу... а вот выгрузить как


Тебе известны  иные штатные способы выгрузки, нежели FreeLibrary, и ты не знаешь какой  из них выбрать ?

Нет ну они конечно существуют в природе, но для твоего простейшего случая попросту не нужны или не подходят)


 
L@ti   (2007-01-18 13:43) [16]


> Ну так и в чем же тогда дело ?)

Дело в переписании приложения в целом с dll на bpl. Т.к., эта dll зазывается во многих местах программы. (и причем не одной.)

> Ну и какого же ляда, если понятно, ты при этом задаешь вопрос
>
> > загружать динамически .. могу... а вот выгрузить как

В самом:
program Balance;

uses
Forms,...

Необходимо ловить сообщение и выгружать dll,.. Но вот как послать его так, чтоб оно пришло именно моему приложению, которое по идеи еще не создалось (MDI) :)

> Тебе известны  иные штатные способы выгрузки, нежели FreeLibrary,
>  и ты не знаешь какой  из них выбрать ?

Нет не интересны...


 
Сергей М. ©   (2007-01-18 13:54) [17]


> Необходимо ловить сообщение и выгружать dll


Опять ты про свои "сообщения") ... Вот они тебе дались !
Про них будем рассуждать, когда ты сподобишься ответить на уже дважды заданный вопрос про модальность библ.формы


 
Skier ©   (2007-01-18 13:55) [18]

не знаю, не знаю, но делать библиотеку только для формы авторизации...
стоит оно того ? ведь как только форму будешь использовать в библиотеке к ней же пол VCL"я "подключится" и биб-ка будет весить килобайт 500. оно надо ? )


 
L@ti   (2007-01-18 14:04) [19]


> модальность библ.формы

типа Dialog... Не модальна.
При создании формы "из dll" передаю Application.program Balance;
Т.е.:
uses
Forms,
uMain in "uMain.pas" {frmMain}
....;

const
 cpTitle= "ProFeed v 1.0.0.0";
 cpLogin= "ÄÈÀËÎÃ ËÎÃÈÍ";
 cpGrpBxLogin= "ÂÂÅÄÈÒÅ ÏÎËÜÇÎÂÀÒÅËß È ÏÀÐÎËÜ:";

 msExHd: String= "Âûõîä";
 msEx: String= "Âû õîòèòå ïîêèíóòü ïðèëîæåíèå ?";
 msEr: String= "Îøèáêà";
 msErFdll: String= "DLL íå íàéäåíà !";
 msErPdll: String= "Òî÷êà âõîäà â îäíó èç ôóíêöèé DLL, íå íàéäåíà !";
 msErCreatDll: String= "Íåóäàëîñü ñîçäàòü ôîðìó ! (DLL)";
 msErExcDll: String= "Îøèáêà èñïîëíåíèÿ DLL !";

 lbLogin: String= "dll\Login\dLogin.dll";
 lbGetInfo= "dll\GetInfo\dGetInfo.dll";

 mesUSR= WM_USER+ 99;

var
hLogin: THandle;

{$R *.res}

begin
hLogin:= 0;
  try
  try
    hLogin:= LoadLibrary(PChar(lbLogin));
    if hLogin<>0 then
      begin
        @InitLogin:= GetProcAddress(hLogin, "InitLogin");
        @CreateLogin:= GetProcAddress(hLogin, "CreateLogin");
        @CloseLogin:= GetProcAddress(hLogin, "CloseLogin");
        @DoneLogin:= GetProcAddress(hLogin, "DoneLogin");
        if (Addr(@InitLogin)<> nil)and (Addr(@InitLogin)<> nil)
           and (Addr(@InitLogin)<> nil)and (Addr(@InitLogin)<> nil) then
          begin
            InitLogin(Integer(Application));
            if CreateLogin(0, PChar(cpLogin+ "  ["+ cpTitle+ "]"), PChar(cpGrpBxLogin), "", dm.Connection) then
              begin
              end
            else
              begin
                MessageBox(Handle, PChar(msErCreatDll), PChar(msEr), MB_OK);
              end;
          end
        else
          begin
            MessageBox(Handle, PChar(msErPdll), PChar(msEr), MB_OK);
          end;
      end
    else
      begin
        MessageBox(Handle, PChar(msErFdll), PChar(msEr), MB_OK);
      end;
  except
    on E: Exception do
      MessageBox(Handle, PChar(msErExcDll+ #13+ E.Message), PChar(msEr), MB_OK);
  end;
  finally
   //
  end;
Application.Initialize;
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
end.


 
L@ti   (2007-01-18 14:08) [20]


> Skier ©   (18.01.07 13:55) [18]
>
> не знаю, не знаю, но делать библиотеку только для формы
> авторизации...


> она также является и диалогом, ввода лицевых, сумм, периодов.
> . и еще парочку вещей...!


 
Сергей М. ©   (2007-01-18 14:15) [21]


> типа Dialog... Не модальна


Любая визуальная форма есть "типа Dialog" ! Диалог с пользователем).. На то она и форма, чтобы осуществлять этот диалог.

А модален или не модален этот диалог с пользователем  - совершенно другой вопрос. Только не говори, что не понимаешь термина и смысла "модальность окна" - при всем вышефигурирующем ты рискуешь быть забросанным тухлыми помидорами и яйцами, с учетом того что вопрос был задан именно здесь, а не в "Начинающим")


 
L@ti   (2007-01-18 14:35) [22]


> Сергей М. ©   (18.01.07 14:15) [21]

Тухлыми яйцами.. Грубишь. Следи чуть- чуть. За речью. А то я смотрю, ты вообще виртуальный парень.
Ты скажи просто, я тебя не пойму, я скажу просто, я тебя! не пойму. И все. И не пиши.. Ты занемаешся сейчас. Пустой болтовней.
Тебя задел вот этот момент.

> L@ti   (18.01.07 12:03) [7]

Так что не погружайся полностью в информационные технологии, а буть чуточку почеловечней.
А то я смотрю ты совсем робот.

Если человек понял
> Юрий Зотов ©   (18.01.07 12:31) [8]


В каком направлении речь идет, то он сразу и ответил...
А ты на грубость нарываешься...
А поверь мне.. Грубить, это не хорошо.. Лутше промолчать.


 
Сергей М. ©   (2007-01-18 14:42) [23]


> L@ti   (18.01.07 14:35) [22]



> Если человек понял


То что этот уважаемый человек понял, никоим образом не вяжется с твоей навязчивой идеей по поводу "сообщений" - тебе это никак не поможет, если у тебя НЕмодальная форма.

Вдумайся в сказанное, чудо)

В противном случае - LMD.


 
L@ti   (2007-01-18 14:52) [24]


> Сергей М. ©   (18.01.07 14:42) [23]

А я что ему ответил:
L@ti   (18.01.07 12:56) [9]

> Юрий Зотов ©   (18.01.07 12:31) [8]

Вот спасибочки за идейку добрый человек.

Не хочу ругаться Сергей М., из уважения к старшим., Т.к. я на много младше. Возможно мы друг не поняли. Спасибо за наводяшии ответы и встречные вопросы.!
С Уважением!


 
Сергей М. ©   (2007-01-18 15:00) [25]

Так и осталось страшной тайны модальность твоей формы)



Страницы: 1 вся ветка

Текущий архив: 2007.02.11;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.056 c
2-1169551622
Данилов Антон
2007-01-23 14:27
2007.02.11
Помогите разобраться с формой в дельфи.


2-1169238783
creator
2007-01-19 23:33
2007.02.11
Установка проги из сети


2-1169823584
loword2
2007-01-26 17:59
2007.02.11
Запись в textfile


15-1168916009
Юнит
2007-01-16 05:53
2007.02.11
Как прописать {$DEFINE UseBox}, чтобы она была видна во всех юнит


15-1169547358
Alkid
2007-01-23 13:15
2007.02.11
LISP