Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа с DLL через exe 
:(
    Опции темы
z-END
  Дата 1.3.2004, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



Необходимо в .exe вставить формы содержащтеся в .dll причем не как отдельные окна, а в контрол (TPanel, TPageControl и т.п.)

Имеется такая структура:
main.exe
subXX.dll (библиотеки содержащие TForm's)

main.exe

Код
{
FormCreate
 vHandle[x] := LoadLibrary ('sub.dll');
 @vInterface[x] := GetProcAddress (vHandle[x], 'vInterface');
 @vClose[x] := GetProcAddress (vHandle[x], 'vClose');
...

FormActivate
  vInterface[x] ( Self.Panel);
...

FormClose
  vClose[x];
  FreeLibrary (vHandle[x]);
...
}


subXX.dll
Код
{
procedure vInterface(Parent:TsomeControl)
 DLLForm:=TDLLForm.CreateParented (Parent.Handle);
 DLLForm.Left:=0;
 DLLForm.Top:=0;
 DLLForm.Width:=Parent.Width;
 DLLForm.Height:=Parent.Height;
 DLLForm.Show;
}

Вроде-бы все хорошо работает... но несовсемsad.gif
В DLLForm's не работают элементы, например:
в DLLForm имеется RichEdit, при нажатии кнопки
DLLForm.Button:
Код
RichEdit.LoadFromFile('some.txt');

но загруженный текст не отображается в RichEdit, до тех пор пока не выполнить DLLForm.RecreateWND; а это уж очень некрасиво, т.к. перерисовывается все родительское окно из exe файла.

Есть ли другие варианты решения этой проблеммы?


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
<Spawn>
Дата 1.3.2004, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Попробуй инициализировать Application DLL - а. Т.е. создаешь проецдурку такого типа:

Код
procedure InitApplication(App: TAppliaction);
begin
 Forms.Application := App;
end;


и пихаешь в Длл, используя ее перед юзанием втоей ДЛЛ.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
z-END
Дата 1.3.2004, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



Да.. все гениальное простоsmile.gif спасибо!

тока теперь надо добавить в subXX.dll
Код
procedure vClose;
DLLForm.Free;
Forms.Application := nil

и все заработает


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Unregistered
Дата 2.3.2004, 03:03 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Может тогда корректней вот так?:

var OldApp:TApplication;

procedure InitApplication(App: TAppliaction);
begin
OldApp:=Application;
Application:=App;
end;

procedure UnInitApplication;
begin
Application:=OldApp;
end;

В смысле возвратить dll-ке ее старый application, и уже потом выгружать?
  Вверх
<Spawn>
Дата 2.3.2004, 05:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Unregistered дак все работает уже.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
z-END
Дата 2.3.2004, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



Вообщето-даsmile.gif все уже работает
Hy a если че-то и неработает, то FreeLibararyAndExitThread и всеsmile.gif

И еслу уж быть точным, то в дллельке Application не инициализируется, ну покрайней мере я так думаюsmile.gif поэтому возвращать предидущее состояние Application смысла нет.
Если я неправ.... см нижеsmile.gif


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
z-END
  Дата 2.3.2004, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



Ну вот опять приколыsad.gif
Все хорошо работало, пока на форму на поместил TOpenDialog, при выполнении .Execute создаются Threads которые при закрытии программы невыгружаются... и программа остается висеть в памяти...
Чего делать? как бороться? непонятно


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0706 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.