DLL i zwrot z funkcji

problemy z funkcjonowaniem bibliotek, komponentów itp.

Re: DLL i zwrot z funkcji

Nowy postprzez Cyfrowy Baron » środa, 16 czerwca 2010, 10:55

Nigdy tego nie sprawdzałem dla bibliotek DLL, ale to możliwe. Trzeba więc stworzyć klasę i przekazywać argumenty poprzez elementy klasy.
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
    Windows XPFirefox

Re: DLL i zwrot z funkcji

Nowy postprzez polymorphism » środa, 16 czerwca 2010, 11:17

duf napisał(a):Pola w strukturze nie przenoszą wartości z DLL. Czy to możliwe?

Jak to nie przenoszą? Jeśli zwracasz przez wartość tę strukturę, to nie ma takiej opcji.

@Baron, w C++ klasa i struktura to praktycznie to samo. Zamiana jednego na drugie niczego nie zmieni, jeśli sam sposób użycia jest zły.
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: DLL i zwrot z funkcji

Nowy postprzez duf » środa, 16 czerwca 2010, 11:42

polymorphism napisał(a):Jeśli zwracasz przez wartość tę strukturę, to nie ma takiej opcji.

Przez wartość. Próbowałem przez referencję ale jest błąd.
Struktura w pliku .h podłączona do dwóch projektów za pomocą Add to Project
Kod: Zaznacz cały
struct XMLstruct
{
   int nrpliku;
   String Label55;
   String Label146;
   String datainrpliku;
};
XMLstruct XMLstruktura;

W DLL sprawdzam wartość i ona jest.
Kod: Zaznacz cały
XMLstruktura.datainrpliku = "20100616";
ShowMessage( (XMLstruktura.datainrpliku).c_str());

W głównej aplikacji string jest pusty.
Kod: Zaznacz cały
ShowMessage( (XMLstruktura.datainrpliku).c_str());
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: DLL i zwrot z funkcji

Nowy postprzez polymorphism » środa, 16 czerwca 2010, 12:18

A skąd kompilator ma wiedzieć, że zmienna XMLstruktura jest zdefiniowana w DLL-ce? W obecnej formie obie strony mają swoją wersję tej zmiennej.
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: DLL i zwrot z funkcji

Nowy postprzez duf » środa, 16 czerwca 2010, 12:57

polymorphism napisał(a):A skąd kompilator ma wiedzieć, że zmienna XMLstruktura jest zdefiniowana w DLL-ce? W obecnej formie obie strony mają swoją wersję tej zmiennej.

Jak zrozumiałem DLL powinna zwrócić XMLstruktura poprzez wartość. W głównym programie odbieram tą wartość i przypisuję do innej zmiennej typu XMLstruct. Czy tak? Jeżeli tak to mam błąd podczas zamykania aplikacji. Pola struktury są zmieniane.

Edit:
Ta inna zmienna w głównej aplikacji musi być jednak zdefiniowana wcześniej w pliku .h. A w DLL muszę utworzyć własną zmienną i ją zwrócić. Ale to jednak dalej powoduje problem z pamięcią podczas zamykania aplikacji.
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: DLL i zwrot z funkcji

Nowy postprzez polymorphism » środa, 16 czerwca 2010, 13:25

Jak zrozumiałem DLL powinna zwrócić XMLstruktura poprzez wartość.

Nie DLL-ka, tylko funkcja co najmniej.

Czy tak?

Tak.

Jeżeli tak to mam błąd podczas zamykania aplikacji.

Masz błąd, o którym była już mowa w innym wątku... Twoim wątku. Sprawa dotyczy zarządzania pamięcią w relacjach aplikacja <-> DLL.
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: DLL i zwrot z funkcji

Nowy postprzez duf » środa, 16 czerwca 2010, 14:57

polymorphism napisał(a):Masz błąd, o którym była już mowa w innym wątku... Twoim wątku.

Pokaż mi z łaski swojej gdzie jest ten wątek.
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: DLL i zwrot z funkcji

Nowy postprzez polymorphism » środa, 16 czerwca 2010, 16:28

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: DLL i zwrot z funkcji

Nowy postprzez duf » środa, 16 czerwca 2010, 18:44

Tylko, że ja tu nie tworzę obiektu dynamicznego i nigdzie go nie zwalniam.
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: DLL i zwrot z funkcji

Nowy postprzez polymorphism » środa, 16 czerwca 2010, 19:48

Ty może nie, ale w strukturze masz Stringi, które dokonują alokacji pamięci na własne potrzeby. Jeśli nie masz z góry narzuconego wymogu, odpuść sobie DLL-ki, bo większy z tego problem niż pożytek. W sumie DLL-ek używa się w dwóch przypadkach: pluginy/rozszerzenia (run-time dynamic linking) i współdzielone, duże biblioteki (load-time dynamic linking). W pozostałych przypadkach nie maja większego sensu (poza jakimiś specyficznymi zastosowaniami).

Oczywiście nie można wykluczyć, że powodem błędów jest coś innego, ale...
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: DLL i zwrot z funkcji

Nowy postprzez Cyfrowy Baron » czwartek, 17 czerwca 2010, 08:18

Ty chcesz byśmy zgadywali coś Ty tam napisał. Podaj kod - funkcji w bibliotece DLL, sposoby w jaki ją eksportujesz z biblioteki, podaj kod importu funkcji i sposoby w jaki podłączasz bibliotekę w aplikacji, oraz konstrukcję struktury. Bez tych danych nie da się nic więcej powiedzieć o Twoim problemie.
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
    Windows XPFirefox

Poprzednia strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Biblioteki i komponenty

Kto przegląda forum

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