Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Форма в dll. Пытаюсь разобраться


Страницы:   1 2 3 4

EgorovAlex ©   (2010-03-29 13:13:00) 

Есть такой код библиотеки:


library pDll;

uses
 Windows, SysUtils, Classes, Forms,
 uDll;

{$R *.res}

procedure Show(App: TApplication); stdcall;
var
 DllApp: TApplication;
begin
 DllApp := Application;
 Application := App;
 with TForm.Create(Application) do
 try
   ShowModal;
 finally
   Free;
 end;
 Application := DllApp;
end;

exports
 Show;

begin
end.


Вызываю так:
procedure TFormTest.btnTestDllClick(Sender: TObject);
var
 hLib: THandle;
 Show: procedure(App: TApplication); stdcall;
begin
 @Show := nil;
 hLib := LoadLibrary('pDll.dll');
 if (hLib > 0) then
 try
   @Show := GetProcAddress(hLib, 'Show');
   if (@Show <> nil) then
     Show(Application);
 finally
   FreeLibrary(hLib);
 end;
end;


Первый вызов проходит удачно, а после второго клика на баттоне выскакивает аксесс виолейшн. В чём может быть дело? Форма в dll пустая.

Если процедуру создания формы заменить на:

procedure Show(App: TApplication); stdcall;
begin
 with TForm.Create(App) do
 try
   ShowModal;
 finally
   Free;
 end;
end;


То форма создаётся нормально много раз, только форма теперь не по центру главной формы создаётся, а в центре экрана, а это не устраивает (у формы стоит Position := poMainFormCenter)


Anatoly Podgoretsky   (2010-04-03 10:42:00) [1]

> Германн  (03.04.2010 01:52:01)  [61]

Справляется, только если она делает по Технологии Дельфи, не в ввиди все в одном файле, а все в одном дистрибутиве, но при этом размер больше и полностью убивает идею ДЛЛ. Если же ДЛЛ отдельно от инсталяции, то тогда АД гарантирован, но не у всех.


Германн   (2010-04-03 01:52:00) [2]


> либо отрубается функциональность, с не менее громким звуком

<offtop>
 ПУК!
</offtop>

А в целом мне кажется, что этот способ мало относится к проблеме DLL Hell. Контроль версий прекрасно справляется если и DLL и основную программу делает одна и та же компания.  
Или в других условиях сомнительно помогает. Чем юзера спасёт от DLL Hell громкий ПУК! Разве что полная переустановка твоего ПО. Даже если допустить, что твоё ПО грамотно переустанавливается, то это всё равно геморрой, причем непонятный для юзера.


Игорь Шевченко   (2010-04-02 15:22:00) [3]

KSergey ©   (02.04.10 13:57) [59]

Можно. У каждой DLL/BPL есть версия, эта версия прописана в ресурсах DLL и в базе данных, при загрузке DLL версия проверяется, если не совпадает, то либо рушится приложение, либо отрубается функциональность, с не менее громким звуком


KSergey   (2010-04-02 13:57:00) [4]

> Игорь Шевченко ©   (01.04.10 19:15) [58]
> используется контроль версий, так что создать DLL Hell крайне трудно.

Можно это чуть подробнее расписать? О каком именно контроле версий речь.


Игорь Шевченко   (2010-04-01 19:15:00) [5]

Дмитрий Белькевич   (01.04.10 15:19) [54]

Обычно кривизна рук разработчиков имеет больший весовой коэффициент :)

Мы честно стараемся выпрямлять свои. Как получается. У нас используется контроль версий, так что создать DLL Hell крайне трудно. Точнее, можно, но для этого требуются дополнительный осмысленные действия, причем много. Случайно не получится :)


Дмитрий Белькевич   (2010-04-01 16:09:00) [6]


> Отказываемся, от некоторых частей, насколько это возможно.


Фикс > Отказываемся, насколько это возможно. От некоторых её частей.


Дмитрий Белькевич   (2010-04-01 16:07:00) [7]


>  В пределах скромных сил.


В идеале, например, хотелось бы отказаться от операционки.

Отказываемся, от некоторых частей, насколько это возможно.


Дмитрий Белькевич   (2010-04-01 16:04:00) [8]

http://quality.eup.ru/MATERIALY3/pap.htm

Мы стараемся по каждому проблемному случаю сделать какие-то выводы. В пределах скромных сил.

Один из выводов - чем меньше в системе файлов, тем меньше отказов.


Дмитрий Белькевич   (2010-04-01 15:19:00) [9]


> Потому что у юзеров и разработчиков кривые руки. Произведение
> кривизны и дает такой результат.


Если руки разработчиков могут быть так или иначе выпрямлены, то как выпрямить руки юзеров?

Я понимаю, что проще всего софт разрабатывать для идеального, сферического юзера в вакууме и для идеальной, сферической среды (винды/железа/датчкиов/приборов/файлов и так далее).

Но IRL идеального, увы, нигде нет. Впрочем, думаю, вы это и сами знаете еще и лучше меня. Если вам удаётся с этим всем беспроблемно справляться, то можно только порадоваться.


Игорь Шевченко   (2010-04-01 14:51:00) [10]

Дмитрий Белькевич   (01.04.10 14:34) [52]


> Почему юзеры, сотнями тысяч, должны вообще о каких-то дллках
> задумываться?


Потому что у юзеров и разработчиков кривые руки. Произведение кривизны и дает такой результат.


Дмитрий Белькевич   (2010-04-01 14:34:00) [11]

Почему юзеры, сотнями тысяч, должны вообще о каких-то дллках задумываться?

Берём любую дллку и ищем в гугле:

"d3dx9 27.dll", ""msvcr71.dll", "msvcr70.dll", и так далее...


Дмитрий Белькевич   (2010-04-01 14:06:00) [12]


> MS Office, Visual Studio, Delphi itself - идеальные приложения
> в плане DLL - несколько EXEшников, куча DLL, все прекрасно
> работают. Апдейты проходят на ура (не то, что у толстого
> скайпа, который надо качать целиком)


http://www.google.com.by/search?hl=ru&safe=off&client=opera&hs=y9w&rls=ru&q=dll+not+found&meta=&aq=f&aqi=&aql=&oq=&gs_rfai=


Игорь Шевченко   (2010-03-31 15:23:00) [13]

evvcom ©   (31.03.10 13:53) [49]

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


evvcom   (2010-03-31 13:53:00) [14]


> Иногда проще перекомпилировать очень старые проекты на не
> очень старую версию Delphi :)

Иногда да, но иногда без корректировки не компилится. А учитывая чисто русский подход: "Взять всё нах и переписать!" не очень хочется корректировать кем-то криво написанное, добавляя еще и своей кривизны.
- Папа, а почему солнце утром восходит на востоке, а садится вечером на западе?
- Сынок, а ты проверял? Эффект устойчивый?
- Да, такое каждый день бывает.
- Ради бога, сынок, ничего не трогай! Работает и пусть дальше так работает!


Германн   (2010-03-31 01:58:00) [15]

Бессмысленный какой-то спор. Имхо зря Леонид привёл ту ссылку.
Главное что к самой Дельфи этот спор имеет очень сомнительное отношение. И чего ради этот спор в "Основной"?


Игорь Шевченко   (2010-03-31 00:03:00) [16]

Дмитрий Белькевич   (30.03.10 23:34) [45]

MS Office, Visual Studio, Delphi itself - идеальные приложения в плане DLL - несколько EXEшников, куча DLL, все прекрасно работают. Апдейты проходят на ура (не то, что у толстого скайпа, который надо качать целиком)


> Где в Win длл'льный ад лежит? Папка WinSxS наиболее похожа?


Для пущей информации - папка WinSxS появилась исключительно в WinXP и выше, а перечисленные вначале продукты работали и до того :)


> В наших приложениях dll hell, к счастью, нет, из-за отсутствия
> самих этих dll


В наших приложения тоже нет DLL Hell, а DLL и BPL много. Но и приложений тоже немало.

Насчет толстого скайпа - оракл всяко толще скайпа, однако на фоне толстенного oracle.exe (90 метров весом) еще и DLL-ей, как звезд на небе. И без всякого вам DLL Hell.


Anatoly Podgoretsky   (2010-03-30 23:39:00) [17]

> Дмитрий Белькевич  (30.03.2010 23:34:45)  [45]

Она предназначено для борьбы с этой проблемой, но используется в основном для ,NET программ, судя по размерам ада очень много. У меня аж на 9 гб, свыше 12 000 папок


Дмитрий Белькевич   (2010-03-30 23:34:00) [18]


> Очевидно, тогда слово имеем в посте [40] следует употреблять
> в ином падеже, нес па ? А то я тебя неверно понял, хотел
> посочувствовать :)


Не знаю, где какой должен быть падеж, однако dll hell - это известная и признанная MS'ом проблема. Они и бороться с адом вроде пытаются. Где в Win длл'льный ад лежит? Папка WinSxS наиболее похожа?

В наших приложениях dll hell, к счастью, нет, из-за отсутствия самих этих dll. Кроме разве что указанных проблем с COM серверами. Но эта проблема, к счастью, не напрягает и кроме как у себя на буке я её пока нигде не видел.

Скайп, кстати, идеальное приложение в плане дллок - лежит один, толстый, Skype.exe, и больше ничего. В appdata только несколько папок с юзерскими данными. Нам к идеалу, увы, не приблизиться - некоторые сторонние библиотеки используем, которые переписывать на Делфи долго и бессмысленно.


Игорь Шевченко   (2010-03-30 22:48:00) [19]

Дмитрий Белькевич   (30.03.10 22:20) [43]

Очевидно, тогда слово имеем в посте [40] следует употреблять в ином падеже, нес па ? А то я тебя неверно понял, хотел посочувствовать :)


Дмитрий Белькевич   (2010-03-30 22:20:00) [20]


> Вы имеете или MS имеет ? Это несколько разные вещи...


Юзеры имеют.


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо