Problem z DLL-em (Formatki)

0

Witam.

Pracuję nad aplikacją MDI. Mam dll-a, w którym mam formatkę a na niej trzy pola Edit, pagecontrol i dwa przyciski. W głównym exe-cu wywołanie wygląda tak:

procedure ShowForm(Uchwyt: integer); stdcall; external 'LIB\kontrahent.dll' name 'ShowForm';

i w procedurce dalej:

 ShowForm(mainform.Handle);

Z kolei w dll-u jest tak:


procedure ShowForm(Uchwyt: integer); stdcall;
begin

  Form1:=TForm1.Createparented(uchwyt);
  Form1.Show;

end;

I na koniec kluczowe pytanie dlaczego nie mogę kliknąć na pola EDIT. Wyglądają tak jakby były ustawione na enabled:=false; A edit.setfocus działa, ale wtedy jest aktywny tylko ten edit, który jest focused.

0
  1. może nie tworzysz formy
  2. jeśli tworzysz robisz to w tej procedurze którą wywołujesz
  3. przy używaniu tylko wybranych metod z biblioteki jest ona ładowana tylko da pamięci na czas jej wykonania
  4. w momencie końca wywoływanej metody biblioteka jest zwalniania z pamięci
  5. skoro biblioteka jest zwalniana z pamięci to forma też
  6. by biblioteka była w pamięci ( a więc forma też ) tyle czasu ile chcesz musisz zastosować drugi sposób
  7. LoadLib i FreeLib tak bodajże zwą się metody od tego
  8. w sekcji uses biblioteki dodajesz Forms
  9. w głównym bloku instrukcji w bibliotece dajesz Application.Initialize i Application.Run, gdy dodasz formę do projektu jej tworzenie zostanie automatycznie dopisane pomiędzy Initialize i Run
  10. ustawiasz by forma się nie pokazywała
  11. tworzysz metody na export by program mógł sterować formą

taki sobie dekalog

0

potwoor, nie rób mu wody z mózgu. W DLL NIE DA SIĘ zaimplementować przyzwoicie form MDI. Application, które chcesz zadeklarować w dll to zupełnie inne Application, niż w głównym programie. Dll ma osobny pamięci, dlatego trzeba się nieźle namęczyć, żeby nie było wyjątków ani wycieków pamięci. Tam wyżej RudyBestyj podał linka do wątku, w którym ten temat był n-ty raz wałkowany. Zajrzyj do odsyłacza do delphi.about i poczytaj, jest sporo interesujących wiadomości.

0

ups.. mój błąd.. nie zauważyłem tego MDI, a tak w ogóle to czemu one nie lubie dll'ek ?

0

No pisałem w skrócie o rozdzielnej gospodarce pamięcią. Dlatego np albo używasz ShareMem, albo przesyłasz do dll-ki stringi przez PChar. Zwalnianie obiektów musi być wykonywane w dll-ce która te obiekty utworzyła, etc etc. Na delphi.about jest to przystępnie opisane ;]

0

ShareMem równie pięknie krzaczy główny program, tylko, że tak to nazwę w inny sposób. Jeśli chodzi o wykonywanie i zwalnianie to celowo nie zrobiłem form1.free

Faktycznie skorzystałem z BPL-a i działa wszystko bez zarzutu. Wniosek: DLL + MDIChild, albo nie wyjdzie albo się ktoś zadłubie.

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