Przekazywanie danych do funkcji w dll

dział ogólny

Przekazywanie danych do funkcji w dll

Nowy postprzez Koziol » środa, 7 października 2009, 18:07

Mam drobny dylemat odnośnie przekazywania danych z progamu "matki" do bibliotek (przyczym biblioteki są dołączane dynamicznie). Przyjmijmy że każda z n bibliotek zawiera funkcje:
DllStart();
DllStop();
// specjalnie nie dałem parametrów dla funkcji.

Teraz przyjmijmy że chcemy przekazać jakieś dane do funkcji np. wskaźnik na okno.

Mozna to zrobić na bazie
DllStart(TForm1 *Form1);
...
DllStart(this);

ale może się zdarzyć że będziemy chcieli przekazać więcej niż 1 parametr (a dla różnych bibliotek różną liczbe parametrów) co wtedy?
Wymyśliłem rozwiązanie następujące:

Stworzyć nową klasę np:
Kod: Zaznacz cały

class Data
{
...
};

i przekazywać wskaźnik tylko do tej klasy.
Argumenty które przemawiają (do mnie) za to:
- porządek w kodzie.
- możliwość umieszczenia takiej klasy w osobnej bibliotece (zmniejszenie rozmiaru *.exe co przy większych aplikacjach może być przydatne),
- nie trzeba posiadać nagłówka "głównej" klasy tylko klasy Data.

No i na koniec (:D) moje pytanie - czy jest to słuszne rozwiązanie, czy może jest jakieś prostsze, jeżeli tak to jakie?
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
Podziękował : 8
Otrzymał podziękowań: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Re: Przekazywanie danych do funkcji w dll

Nowy postprzez Cyfrowy Baron » środa, 7 października 2009, 18:18

Cokolwiek chcesz przekazać do funkcji możesz to zrobić poprzez argumenty tejże funkcji.



Temat tworzenia klas w bibliotekach był wałkowany na tym forum przez ostatnie dwa tygodnie i wzbudził wiele kontrowersji i sporów, więc poczytaj tamte posty.
Jedno udało się ustalić, to co chcesz nie może być robione w odniesieniu do bibliotek ładowanych dynamicznie.



- porządek w kodzie.
- możliwość umieszczenia takiej klasy w osobnej bibliotece (zmniejszenie rozmiaru *.exe co przy większych aplikacjach może być przydatne),
- nie trzeba posiadać nagłówka "głównej" klasy tylko klasy Data.


Porządek w kodzie - to nie jest dobry argument ZA. Porządek można wprowadzić na wiele sposobów.
Mniejsza aplikacja - tylko plik aplikacji, jeżeli program już na starcie będzie ładował taką bibliotekę i będzie z niej korzystał do końca, to aplikacja zajmie więcej miejsca w pamięci.
nie trzeba posiadać nagłówka "głównej" klasy tylko klasy Data - nie bardzo rozumiem, ci Ty przez to rozumiesz, ale z tego o czym ostatnio dyskutowano na tym forum, to chyba nie masz racji.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Przekazywanie danych do funkcji w dll

Nowy postprzez polymorphism » czwartek, 8 października 2009, 10:56

- nie trzeba posiadać nagłówka "głównej" klasy tylko klasy Data.

Tylko jeśli Data w definicji zawiera odwołania do klasy 'głównej', to i tak pośrednio trzeba będzie załączyć nagłówek definiujący tę klasę.

- możliwość umieszczenia takiej klasy w osobnej bibliotece (zmniejszenie rozmiaru *.exe co przy większych aplikacjach może być przydatne),

Tak, ale tylko w przypadku, o którym tu napisałem. W przeciwnym wypadku nie warto bawić się w DLL-ki.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 5 gości