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

DmiSb ©   (2006-10-23 11:28:00) 

Никак не пойму, почему при закрытии немодальной формы из динамически загруженной DLL вылетает AV

Код DLL :

library MyLIB;

uses
 SysUtils,
 Classes,
 Windows,
 Forms,
 ibase,
 LIBFormU in 'LIBFormU.pas' {LibF};

procedure LibFormShow(HApp, HForm: THandle); stdcall;
begin
 Application.Handle := HApp;
 if Assigned(LibF) then
   LibF.Show
 else begin
   LibF:=TLibF.Create(Application);
   LibF.CallForm:=HForm;
   LibF.Show;
 end;
end;

procedure LibFormFree; stdcall;
begin
 LibF.Free;
end;

exports LibFormShow;
exports LibFormFree;

begin
end.

Кусок кода основной программы:

 TLibFormShow = procedure(HApp, HForm: THandle); stdcall;
 TLibFormFree = procedure; stdcall;

var HLib: THandle;

procedure TMainF.WMUser(var Msg: TMessage);
var LF: TLibFormFree;
begin
 if HLib > HInstance_Error then begin
   LF := GetProcAddress(HLib, 'LibFormFree');
   if Assigned(LF) then LF;
   FreeLibrary(HLib);
 end;
end;

procedure TMainF.SpeedButton1Click(Sender: TObject);
var LS: TLibFormShow;
begin
 if HLib <= HInstance_Error then
   HLib := LoadLibrary('MyLib.dll');
 if HlLib > HInstance_Error then begin
   LS := GetProcAddress(HLib, 'LibFormShow');
   if Assigned(LS) then LS(Application.Handle, Self.Handle);
 end;
end;


Slym   (2006-10-24 08:54:00) [21]

модули компиль в пакеты :)


Ketmar   (2006-10-24 08:44:00) [22]

>[43] DmiSb 24-Oct-2006, 08:42
>> пакетами?
>В смысле ?
Borland сделали пакеты. Borland позволили пользователям делать пакеты. Borland дали для этого инструмент, которым пользовались сами.


DmiSb   (2006-10-24 08:42:00) [23]

> пакетами?
В смысле ?


Ketmar   (2006-10-24 08:36:00) [24]

пакетами?


DmiSb   (2006-10-24 08:35:00) [25]

Ну хорошо, сдаюсь.
Может быть это была не самая лучшая мысль сделать программу с ДЛЛ,
но задача стояла следующая :
Программа должна уметь обновлять сама себя через Инет (VPN сеть). Используя ДЛЛ, её можно выгрузить, скачать новую, и загрузить.
Может кто подскажет, как это сделать красивее ?


Ketmar   (2006-10-24 08:14:00) [26]

>[39] DmiSb 24-Oct-2006, 08:03
>программа и ДЛЛ компиляться с пакетами.
>Это не выход.
отчего?

>Задача разбить программу на модули
и всенепременно динамически подгружаемые? может, тогда проще Оберон взять? %-)


DmiSb   (2006-10-24 08:03:00) [27]

Дык, а хочется еще меньше. У меня итак и основная программа и ДЛЛ компиляться с пакетами.
Это не выход.
Задача разбить программу на модули


Loginov Dmitry   (2006-10-24 07:57:00) [28]

DmiSb   (24.10.06 7:47) [37]
А если есть необходимость разбить программу на модули, которые подгружались бы только в случае необходимости (также динамически как ДЛЛ


Скомпилируй все с пакетами (одного VCL вполне достаточно) и наслаждайся жизнью.


DmiSb   (2006-10-24 07:47:00) [29]

> не пользовать формы из длл, тогда и будет всем джа

А если есть необходимость разбить программу на модули, которые подгружались бы только в случае необходимости (также динамически как ДЛЛ) ?


Ketmar   (2006-10-23 21:29:00) [30]

>[35] MetalFan(c) 23-Oct-2006, 21:17
>но окна то есть)
окна -- есть. а форм -- нет. в [31] и [32] речь шла только о формах. %-)


MetalFan   (2006-10-23 21:17:00) [31]


> Ketmar ©   (23.10.06 21:08) [34]

но окна то есть)


Ketmar   (2006-10-23 21:08:00) [32]

>[33] MetalFan(c) 23-Oct-2006, 21:06
>а если ср-вами winapi?
в WinAPI нет форм.


MetalFan   (2006-10-23 21:06:00) [33]

а если ср-вами winapi?


Ketmar   (2006-10-23 19:25:00) [34]

>[31] Leonid Troyanovsky(c) 23-Oct-2006, 19:18
>+ от меня бонус:
>не пользовать формы из длл, тогда и будет всем джа.
или, всё же, сначала разобраться, как это делать правильно. но лучше не использовать вообще -- ты прав. %-)


Leonid Troyanovsky   (2006-10-23 19:18:00) [35]


> Ketmar ©   (23.10.06 18:34) [30]

> всё верно у тебя там указано. %-)


+ от меня бонус:
не пользовать формы из длл, тогда и будет всем джа.

--
Regards, LVT.


Ketmar   (2006-10-23 18:34:00) [36]

>[29] MetalFan(c) 23-Oct-2006, 18:22
всё верно у тебя там указано. %-)


MetalFan   (2006-10-23 18:22:00) [37]

а по поводу
MetalFan ©   (23.10.06 17:55) [25]
что скажете?


MetalFan   (2006-10-23 18:20:00) [38]


> Ketmar ©   (23.10.06 18:15) [27]


ага, я не прав)


Ketmar   (2006-10-23 18:15:00) [39]

>[26] MetalFan(c) 23-Oct-2006, 17:58
>надо пользовать WM_APP + SomeInt...
не обязательно. это желательно делать, если обмениваются сообщениями приложения. а в нашем случае мы имеем как раз "private window class".

и вообще, для обмена сообщениями между приложениями есть RegisterWindowMessage(). %-)


MetalFan   (2006-10-23 17:58:00) [40]

кстати, читаем MSDN
0 through WM_USER–1 Messages reserved for use by the system.
WM_USER through 0x7FFF Integer messages for use by private window classes.
WM_APP through 0xBFFF Messages available for use by applications.
0xC000 through 0xFFFF String messages for use by applications.
Greater than 0xFFFF Reserved by the system for future use

надо пользовать WM_APP + SomeInt...


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

Наверх

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