Jak przesłać dynamicznie utworzony objekt do dll?

problemy z funkcjonowaniem bibliotek, komponentów itp.

Re: Jak przesłać dynamicznie utworzony objekt do dll?

Nowy postprzez duf » środa, 26 maja 2010, 12:13

polymorphism napisał(a):
duf napisał(a):Jak usuwam w aplikacji to jest błąd access violation

Zapewne biblioteka i aplikacja korzystają z różnych stert, a to musi się skończyć katastrofą. Zasada jest prosta: alokujesz pamięć w bibliotece, w bibliotece zwalniasz. Analogicznie z aplikacją. Trzymając się tej zasady unikniesz wielu tego typu problemów.

Dzięki za słowa otuchy. Jest to tak oczywiste ale czytałem różne opinie. Czytałem również żeby w dll nie odwoływać się bezpośrednio do pól klasy czyli np komponentów bo mogą zachodzić nieoczekiwane zjawiska. Nie wiem jak daleko jest to prawdą ale jeżeli tak to czy poprzez wartość lub referencję będzie to bardziej poprawne?
Avatar użytkownika
duf
Intelektryk
Intelektryk
 
Posty: 175
Dołączył(a): czwartek, 9 października 2008, 13:02
Podziękował : 17
Otrzymał podziękowań: 2
System operacyjny: Windows 10
Kompilator: XE8
Gadu Gadu: 0
    Windows XPFirefox

Re: Jak przesłać dynamicznie utworzony objekt do dll?

Nowy postprzez polymorphism » środa, 26 maja 2010, 12:38

Czytałem również żeby w dll nie odwoływać się bezpośrednio do pól klasy czyli np komponentów bo mogą zachodzić nieoczekiwane zjawiska.

Jeśli nie bezpośrednio, to jak inaczej? ;) Problemem jest zupełnie coś innego, zwróć uwagę, że np. taki TImage jest zdefiniowany w obu modułach - bibliotece i aplikacji. Co z tego, że aplikacja poda wskaźnik na swój obiekt TImage, jeśli biblioteka będzie pracować metodami własnej implementacji TImage?1) Wystarczą drobne różnice w implementacjach2) i masz niezły fuck up. Metody wirtualne chronią przed tego typu różnicami, ponieważ razem z obiektem dostarczane są wskaźniki do jego metod (vide vtable), więc masz pewność że dana metoda będzie wywołana na rzecz właściwego obiektu. Dlatego zawsze powtarzam, że jeśli tworzysz bibliotekę ładowaną dynamicznie, jej ABI powinno być jednoznaczne i przenośne - typy proste, funkcje i interfejsy. Żadnych VCL-i, STL-i i innych tego typu.

___
1) kwestia różnych stert i problemów z tego wynikających doskonale to obrazuje.
2) różnice chociażby między wersją debug a release.
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
    Windows XPFirefox

Re: Jak przesłać dynamicznie utworzony objekt do dll?

Nowy postprzez duf » środa, 26 maja 2010, 13:05

Przerobiłem ten kod tak, że obiekt wywoływany jest w dll. Teraz nie ma już żadnych ostrzeżeń czy też errorów. Przekazuje do dll jedenaście parametrów poprzez referencję, głównie vectory, zwykłe zmienne typu wstring i int. Jak widzę w menadżerze zadań gdy uruchamiam program wywołując dll pamięć używana przez program wzrasta maksymalnie o ponad 20 razy z 6MB do chwilami 130MB! Czytałem na forum, że zamiast DLL można używać Package czyli taki rodzaj DLL z wbudowanym Wspomaganiem dla VCL. Czy wiesz coś na ten temat?
Avatar użytkownika
duf
Intelektryk
Intelektryk
 
Posty: 175
Dołączył(a): czwartek, 9 października 2008, 13:02
Podziękował : 17
Otrzymał podziękowań: 2
System operacyjny: Windows 10
Kompilator: XE8
Gadu Gadu: 0
    Windows XPFirefox

Re: Jak przesłać dynamicznie utworzony objekt do dll?

Nowy postprzez polymorphism » środa, 26 maja 2010, 13:34

Nie, od wielu lat nie używam BCB...
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
    Windows XPFirefox

Poprzednia strona

Powrót do Biblioteki i komponenty

Kto przegląda forum

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

cron