Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.02.11;
Скачать: [xml.tar.bz2];

Вниз

О загрузке 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.045 c
3-1164000814
Ольга
2006-11-20 08:33
2007.02.11
компоненты вкладки Servers


4-1159356909
17Landgraf
2006-09-27 15:35
2007.02.11
Подскажите на счет второго параметра в sDlgButtonChecked


2-1169605882
exolon
2007-01-24 05:31
2007.02.11
как cделать,чтобы TEdit воспринимал одни цифры и DecimalSeparator


15-1169565565
Raaer
2007-01-23 18:19
2007.02.11
Почему возникает ошибка в следующей программе?


15-1169415457
Kerk
2007-01-22 00:37
2007.02.11
Skype пытается отобрать домен skype.tv за $75





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский