Delphi, Dll, Forma...

0

Witam, programuje w środowisku Delphi 7 Personal. Mój problem polega na tym że chciałbym stworzyć przypuśćmy normalna aplikacja z formą i plik dll. (Są to dwa osobne projekty z jednego jest to .exe a z drugiego .dll)
Chcę za pomocą procedur w .DLL móc zmieniać wartości buttonów, editów, labeli, itd w projekcie z formą. Problem polega na tym że gdy tworzę procedure:

procedure przyklad;
begin
Form1.Caption := 'Zmieniony przez dll'; //Jak odwolac sie do Formy z aplikacji?
Form1.Button1.Caption := 'Przycisk wywolany z dll';//Jak odwolac sie do Formy z aplikacji?
showmessage('komunikat');
end;

Nie wiem po prostu jak mam się odwoływać do tego projektu wizualnego z formą w procedurze/funkcji w dll. Prostą dll i aplikację oczywiście potrafię zrobić (eksport/import funkcji).

Czy jest to ogólnie możliwe by była aplikacja plik.exe i folder DLL tam różnego typu pliki.dll z funkcjami i by te pliki mogły operować na buttonach/labelach z aplikacji?
Chcę po prostu projekt zrobić bardziej przyjazny do aktualizacji itd by w razie czego napisać moduł update i by sprawdzał czy dostępna jest aktualizacja a potem ściągną poprawioną dll z poprawionymi funkcjami i Done.
Pliki INI mnie nie interesują.

W skrócie to np aplikacja + polish.dll z zawartością:

procedure jezykPL;
begin
Form1.GroupBox4.Caption:= 'Plik:';
Form1.BitBtn1.Caption:= 'Otwórz...';
Form1.BitBtn2.Caption:= 'Zamknij';
//itd
end;

I chcę by w aplikacji móc wywołać tą procedurę ale dll nie chce się skompilować więc klapa.
[Error] Project2.dpr(21): Undeclared identifier: 'Form1'
Nie mam po prostu doświadczenia z tworzeniem bibliotek i środowiskiem. Pozdrawiam i proszę o pomoc.

0

pogmeraj wskaźnikami

0
Ptwr napisał(a)

pogmeraj wskaźnikami

Może niech ktoś da mi troszkę więcej wskazówek, ja szukałem/kombinowałem/czytałem i nic nie wykombinowałem. W kwestii DLL jestem zielony, więc prosiłbym o więcej wskazówek.

//Może środowisko pozwala jakoś to łatwo i szybko połączyć jak z unitem nowym i by potem normalnie się posługiwać tak jak wyżej napisałem "Form1.BitBtn2.Caption:= 'Zamknij';" itd?

0

wyciągasz wskaźnik z jakiejś zmiennej/metody/właściwości, przesyłasz go do DLL'ki w argumencie jakiejś metody, i DLL'ka może operować przy pomocy wskaźnika na danych

0

Coś mi się widzi że źle do tego podchodzisz. W kwestii aktualizacji, to prawie jeden czort czy będziesz miał podmienić exe'ka czy dll'kę. Jak któreś z nich będzie w użyciu to i tak trzeba będzie zamknąć problem. Co do samego tematu - jak już koniecznie chcesz dll'ki to zrób formę w dll'ce a nie w aplikacji. Aplikacja nie będzie zawierała MainForm'a i takie tam ogólne pierdoły. Oczywiście nasuwa się pytanie (w aspekcie DLL) czy to ma być MDI i SDI. W zasadzie formatki w DLL'u to już trochę trudniejsze niż eksport import funkcji, trzeba o paru rzeczach pamiętać ... najlepiej jakbyś poświęcił dzień lub dwa na zdobycie wiedzy teoretycznej.

A jeśli już bardzo chcesz zrobić jak zaplanowałeś, to może przekaż do dll'ki wskaźnik na formę i rób z nią co chcesz, np używając FindComponent (w zasadzie nie wiem czy to zadziała), lub rzutowania.

0
b0bik napisał(a)

Co do samego tematu - jak już koniecznie chcesz dll'ki to zrób formę w dll'ce a nie w aplikacji.
A teraz przyjmijmy, że chcemy jeszcze stworzyć wersje dla języka angielskiego, polskiego, niemieckiego, francuskiego, ... Gdyby każda biblioteka miała formę (coś koło 0,5MB), to przy 20 językach byś już zmarnował kilka minut na transfer 10MB.

b0bik napisał(a)

A jeśli już bardzo chcesz zrobić jak zaplanowałeś, to może przekaż do dll'ki wskaźnik na formę i rób z nią co chcesz, np używając FindComponent (w zasadzie nie wiem czy to zadziała), lub rzutowania.
Druga opcja? To chyba dobrze...

0
mnbvcX napisał(a)

A teraz przyjmijmy, że chcemy jeszcze stworzyć wersje dla języka angielskiego, polskiego, niemieckiego, francuskiego, ... Gdyby każda biblioteka miała formę (coś koło 0,5MB), to przy 20 językach byś już zmarnował kilka minut na transfer 10MB.

Tak ... i jest jeszcze 100 innych za i przeciw. Nie poruszony został przez autora temat "wielojęzykowości", więc bez sensu komentować moją wypowiedź w takim aspekcie. Poza tym z tego co wiem, łatwiej jest to zrealizować poprzez zasoby a nie dll'ki (resourcestring) lub na wiele innych sposobów i teoria o marnowaniu minut jest do bani.

mnbvcX napisał(a)

Druga opcja? To chyba dobrze...

Hę ?

0

Jak chcesz mieć różne wersje językowe to może poczytaj/użyj sprawdzonych metod a nie wymyślaj koła od nowa, w dodatku koślawego

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