![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запутался с показом немодальной формы из DLL
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...