Forma w DLL'u, ale nie poprzez ShowModal

0

Mam taki problem. Mam programik, wykorzystujący wtyczki na DLL'ach i chciałbym mieć możliwość otworzenia jakiejś formy z DLL'a w inny sposób niż poprzez ShowModal. Problem z ShowModal polega na tym, że podczas tego, jak mam otwarte dane okienko, to nie mogę sięprzełączać do pozostałych okienek programu (ShowModal blokuje dalsze wykonywanie programu), za to jak dam Show, to okienko zaraz po utworzeniu jest niszczone, gdyż zwalniam bibliotekę (jest łączona dynamicznie). Czy jest jakiś sensowny sposób, żeby rozwiązać ten problem?
P.S. Nie mogę DLL'i ładować statycznie, gdyż zepsułoby to cały efekt - chodzi o to, że program sam wyszukuje wtyczek do siebie samego w danym katalogu. Pozwala to w każdej chwili stworzyć wtyczkę, o której istnieniu nie mam pojęcia przed kompilacją programu (przy odpowiedniej wiedzy każdy jest w stanie stworzyć taką wtyczkę w dowolnym języku programowania pozwalającym stworzyć biblioteki DLL).
Z góry Thx za wszystkie odpowiedzi.

0

Jak zapewne część ludzi na forum wie - jestem w trakcie pisania pracy inżynierskiej. Twój opis pasuje do niej w 100%. Mam to wszystko, o co pytasz:

  • wyszukiwanie i dynamiczne ładowanie DLL
  • tworzenie dowolnej ilości formatek (u mnie to są obiekty, których jedno z pól jest wskaźnikiem na formatkę) z każdego DLL jako ChildWindow
  • i cała obsługa tychże obiektów

Niestety nie mam aż tyle czasu, aby to wszystko opisać. Można to znaleźć w C++Builder Vademecum Profesjonalisty na stronie 630 i w kolejnym dziale (to taka informacja w razie czego).

Jeśli nikt nie pomoże, to zapukaj do mnie na gg - powiem co i jak.
Ale ostrzegam :-P - piszę w BCB.

0

znalazłem takie coś w Delphi 6. Vademcum Profesjonalisty. s. 286:
"Formularze niemodalne w bibliotekach DLL"

type
  TDllForm = class(TForm);
    btnPrzycisk: TButton;
  end;

function ShowForm(AHandle: THAndle; ACaption: string): longint; stdcall;
procedure CloseForm(AFormRef: longint); stdcall;

implementation

function ShowForm(AHandle: THAndle; ACaption: string): longint;
var
  DllForm: TDllForm;
begin
  Application.Handle := AHandle;
  DllForm := TDllForm.Create(Application);
  Result := longint(DllForm);
  DllForm.Caption := ACaption;
  DllForm.Show;
end;

procedure CloseForm(AFormRef: longint);
begin
  if AFormref > 0 then
    TDllForm(AFormRef).Release;
end;

end.

1 użytkowników online, w tym zalogowanych: 0, gości: 1