DLL i zewnętrzne klasy

dział ogólny

DLL i zewnętrzne klasy

Nowy postprzez Slynx » piątek, 15 lipca 2011, 14:46

Skompilowałem dllke, która wewnątrz korzysta z pewnej klasy (A). Przy kompilacji dołączyłem tą klasę, więc skompilowało się bez problemu. Problemem jest użycie tej klasy przy pisaniu programu z wykorzystaniem tej dll-ki, tj. Podczas pisania programu muszę stworzyć obiekt klasy, która nie została stworzona w tej dll-ce a jedynie dodana przy kompilacji.

Można jakoś dodać taką klasę do dll-ki ? Tak, żeby korzystając z tej dll-ki można było tworzyć obiekty klasy A
(Jak na razie to nawet nie mogę zaimplementować wszystkich metod abstrakcyjnych bo jedna zwraca typ danych właśnie klasy A)

Zależy mi na tym, by wszystko znajdowało się w jednej dll-ce.
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Chrome

Re: DLL i zewnętrzne klasy

Nowy postprzez polymorphism » piątek, 15 lipca 2011, 17:33

Niech DLL-ka eksportuje klasę A, i po problemie (w każdym razie w C++, przy linkowaniu podczas ładowania programu).

Jeśli dobrze pamiętam, temat klas w DLL-kach był wałkowany parę razy na tym forum - poszukaj.
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 zewnętrzne klasy

Nowy postprzez Slynx » piątek, 15 lipca 2011, 20:25

Wiem jak to zrobić z pojedynczymi metodami za pomocą dllimport, ale jak wyeksportować całą klasę... :/
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Chrome

Re: DLL i zewnętrzne klasy

Nowy postprzez polymorphism » piątek, 15 lipca 2011, 21:06

Kilka kwestii:
  • zajrzałeś do dokumentacji lub nawet jakiegoś tutoriala? Bo to trochę dziwne, że dałeś sobie radę z metodą, a z klasą już nie.
  • zapewne chcesz wyeksportować klasy .NET'owe. Pytanie, czy możesz to zrobić w C++/CLI?
  • kluczowa rzecz: po co ta DLL-ka w ogóle? Zawsze to pytanie zadaje początkującym, bo później w większości przypadków okazuje się, że po nic ;)
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 zewnętrzne klasy

Nowy postprzez Slynx » piątek, 15 lipca 2011, 23:09

   Szukałem po sieci, znalazłem kilka artykułów, ale problem w tym, że większość jest nieaktualna, dotyczy starszych wersji, a jak wiadomo w programowaniu szybko wiele się zmienia i nie chce tego robić "starymi" metodami
   No właśnie sam chciałbym wiedzieć czy można to zrobić pod C++/CLI. Szukałem po opcjach w w Visualu, czy nie ma gdzieś możliwości eksportu klasy z dll-ki, ale nic nie znalazłem, co do kodu - na msdn znalazłem tylko te dllimport
   Dll-ka jest klasą interfejsu. Zawiera wszystkie niezbędne metody do napisania poprawnego "pluginu" do aplikacji. Jest niezbędna.

Poza tym dll-ka to taki pomost między programem, a rozszerzeniami. Mam konkretnie na myśli możliwość pisania w C#, a nie dalsze katowanie się w C++/CLI.

Najlepiej by było to zrobić właśnie w C++/CLI. Na pewno jest jakieś rozwiązanie przystosowane do tego, tylko ciężko coś znaleźć. To tak samo jak do tematu z zasobami. Początkowe kody miałem po kilkanaście linijek. Szukałem, szukałem i w końcu wszystko udało się zapisać w 2 linijkach za pomocą funkcji z klas net-owych. Tylko, że tutaj nie mogę nic znaleźć, nic "świeżego".
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Chrome

Re: DLL i zewnętrzne klasy

Nowy postprzez polymorphism » sobota, 16 lipca 2011, 10:09

ale problem w tym, że większość jest nieaktualna

Nie rozumiem, jak to nie aktualna? W C++ eksport klas wygląda cały czas tak samo i jest aktualny.

Szukałem po opcjach w w Visualu, czy nie ma gdzieś możliwości eksportu klasy z dll-ki, ale nic nie znalazłem

A co do tego mają opcje IDE? Takie rzeczy robisz z poziomu kodu. Dajesz po stronie DLL-ki:
KOD cpp:     UKRYJ  
class __declspec( dllexport ) foo  
{
    ...
};

po stronie aplikacji dllexport zamieniasz na dllimport, i już. Czy to zadziała dla klas zarządzanych - nie wiem.

Dll-ka jest klasą interfejsu.

WTF?!

Zawiera wszystkie niezbędne metody do napisania poprawnego "pluginu" do aplikacji. Jest niezbędna.

Oj, taki eksport klas do tworzenia pluginów nie będzie dobry (w każdym razie jeśli chodzi o typowe C++).

Tylko, że tutaj nie mogę nic znaleźć, nic "świeżego".

Zamiast szukać "świeżych" rzeczy, poczytaj dokumentację/opis języka C++/CLI na stronach MS. Ponieważ import/eksport klas czy funkcji ma ścisły związek z językiem tudzież kompilatorem, a nie z bibliotekami, które mogą być "świeże".
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 zewnętrzne klasy

Nowy postprzez Slynx » sobota, 16 lipca 2011, 15:24

Nie rozumiem, jak to nie aktualna? W C++ eksport klas wygląda cały czas tak samo i jest aktualny.

Mam na myśli artykuły dotyczące tego problemu, które znalazłem. Ich daty zatrzymywały się na 2002 lub 2004.

A co do tego mają opcje IDE? Takie rzeczy robisz z poziomu kodu. Dajesz po stronie DLL-ki:

W Visualu wiele rzeczy można stworzyć poprzez środowisko, jakieś kreatory, itp, a odpowiedni kod jest potem automatycznie umieszczany. Dlatego szukałem, czy nie ma gdzieś takiej opcji.

Dll-ka jest klasą interfejsu.

WTF?!

Zważając na odpowiedź, źle się wyraziłem. Ale w sumie to i tak nieistotne.

Oj, taki eksport klas do tworzenia pluginów nie będzie dobry (w każdym razie jeśli chodzi o typowe C++).

Eksport jak eksport... to jest jedna klasa bez żadnych metod (konstruktory) i kilka pól.

Spróbuję coś znaleźć co do tego importu klas, ale już grzebałem w google i pierwsze kilkanaście wyników było dość mizernych. Spróbuję znaleźć coś bezpośrednio na msdn.
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Chrome

Re: DLL i zewnętrzne klasy

Nowy postprzez Slynx » sobota, 23 lipca 2011, 11:38

Uzupełnię - Już znalazłem. Wszystko dodałem. Obeszło się bez importu. Potem rozwiązałem kolejny problem z frameworkami (BadImageFormatException) i ostatecznie mam w mojej aplikacji automatyczne ładowanie dll-ek za pomocą kilku linii kodu. Fajna sprawa. Wystarczy wrzucić dll-ke do katalogu, a on (program) automatycznie wykryje, czy jest poprawna (tj. czy powstała na podstawie klasy bazowej [klasa bazowa, a nie interfejsu, to miałem na myśli]) i ją załaduje, a potem będzie wykorzystywał jak każdą inną. Nic specjalnego, ale i tak fajnie to wygląda ; )
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Chrome


  • 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 6 gości