Текущий архив: 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.53 MB
Время: 0.051 c