Tworzenie rozszerzeń programów

dział ogólny

Re: Klasy w dll

Nowy postprzez banita » sobota, 17 października 2009, 20:10

wargo napisał(a):
[C++ Error] ccc.cpp(8): E2303 Type name expected

Kod: Zaznacz cały
ostream&   m_os;

Dodałem potem to i to samo:
Kod: Zaznacz cały
#include <ostream>


nie sledze tego watku wiec nie wiem o czym konkretnie dyskutujecie ale powyzszy fragment kodu jest bezsensu.
zmienen referencyjne trzeba inicjalizowac podczas tworzenia inaczej sa bezuzyteczne.
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: Klasy w dll

Nowy postprzez polymorphism » sobota, 17 października 2009, 22:42

@wargo: przestrzeń nazw std.
@banita: Dokładnie, nie prześledziłeś wątku 8-) Ten fragment jest ok, bo m_os jest składową klasy inicjowaną w konstruktorze.
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

Re: Klasy w dll

Nowy postprzez banita » poniedziałek, 19 października 2009, 13:42

zwracam honor:D
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: Tworzenie rozszerzeń programów

Nowy postprzez wargo » niedziela, 15 listopada 2009, 21:17

Udało się!

Po prostu przekazuję wskaźnik w parametrze funkcji wywoływanej!



Dll:
Kod: Zaznacz cały
//(...)
//poniższa linijka ma być, aby podczas ładowania dynamicznego, program znalazł funkcję.
extern "C" __declspec(dllexport) void Startuj(TMenuItem *Wtyczki);
//(...)
void Startuj(TMenuItem *Wtyczki)
{
TMenuItem *Nowy = new TMenuItem(NULL);
Nowy->Caption = "Wtyczka testująca";
Nowy->Checked = true;
Wtyczki->Add(Nowy);
}

Program:
Kod: Zaznacz cały
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HANDLE DLLHandle = LoadLibrary("dll.dll");
if(DLLHandle != NULL)
{
typedef (*aStartuj)(TMenuItem*);
aStartuj Startuj = (aStartuj)GetProcAddress(DLLHandle, "_Startuj");
if(Startuj != NULL){Startuj(MenuPlugin);}else{ShowMessage("Dll nie jest dopasowane do programu: nie posiada funkcji startowej \"Startuj()\"");}
}
else
{
ShowMessage("Nie znaleziono wymaganej biblioteki 'dll.dll'");
}
FreeLibrary(DLLHandle);
}
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
Podziękował : 12
Otrzymał podziękowań: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    NieznanyNieznana

Re: Tworzenie rozszerzeń programów

Nowy postprzez polymorphism » niedziela, 15 listopada 2009, 22:46

void Startuj(TMenuItem *Wtyczki)

Przy tej formie, żeby wtyczka działa w 100% wersje VCL-a hosta i wtyczki muszą być dokładnie takie same - w każdym razie te elementy VCL-a, które (współ)tworzą interface systemu wtyczek (tu TMenuItem). Jako że VCL jest ściśle związany z konkretnym IDE, żeby napisać wtyczkę do twojego programu trzeba użyć tej samej wersji środowiska (choć i to nie daje 100% gwarancji), co, biorąc pod uwagę ideę wtyczek, jest wymogiem niepraktycznym, żeby nie rzec: idiotycznym.
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

Re: Tworzenie rozszerzeń programów

Nowy postprzez Cyfrowy Baron » poniedziałek, 16 listopada 2009, 14:04

Mnie zastanawia sama idea tej wtyczki. Wtyczki tworzy się jako rozszerzenia jakichś programów, tak jest np. w Photoshop, Expressivo itp. Można sobie napisać wtyczkę rozszerzając w ten sposób możliwości programu.

Do jakiego programu Ty tworzysz tą wtyczkę?

Jeżeli ta Twoja tak zwana wtyczka ma udostępniać pewne gotowe elementy, funkcje itp. i może być w ten sposób wykorzystywana w różnych programach, to mi to wcale nie wygląda na wtyczkę lecz zwykłą bibliotekę DLL. Wtyczka też może być biblioteką DLL jak to jest w przypadku np. Expressivo, ale biblioteka i wtyczka nawet jeżeli maja podobne konstrukcje to służą czemu innemu, gdyż wtyczkę tworzy się jako rozszerzenie konkretnego programu, a biblioteka to zbiór metod, funkcji, obiektów, itp. które mogą byc wykorzystywane w różnych programach.

Pozwolę przytoczyć sobie definicję wtyczki z Wikipedi:

Wtyczka (ang. plug-in) to dodatek do istniejącego programu rozszerzający jego możliwości lub automatyzujący żmudne czynności.

Stosowanie wtyczek jest coraz częstszym zabiegiem wśród twórców programów, a zwłaszcza tych tworzących otwarte oprogramowanie.

Zaletą takiego rozwiązania jest to, że użytkownicy mogą wybierać pomiędzy funkcjami, które chcą mieć w programie, a których nie. Poza tym odciąża to autora od pisania całego kodu programu, a zrzuca część tego obowiązku na zewnętrznych programistów.

Aby możliwe było pisanie wtyczek, programista musi udostępnić i udokumentować API, czyli interfejs programistyczny.

Architekturę bazującą na wtyczkach często wykorzystują komunikatory internetowe, które obsługują różne usługi komunikacyjne, jak też oferują dodatkową funkcjonalność – np. wysyłanie SMS-ów.




oraz definicję biblioteki DLL również z Wikipedi:

DLL (z ang. Dynamic-Link Library - biblioteka łączona dynamicznie) - w środowisku Windows biblioteka współdzielona (z ang. shared library), która przechowuje implementacje różnych funkcji (podprogramów) programu i/lub zasoby programu. Funkcje i zasoby zawarte w bibliotece DLL mogą być wykorzystane bezpośrednio lub pośrednio (za pośrednictwem innej biblioteki DLL) przez dowolny plik wykonywalny, sama biblioteka DLL nie jest samodzielnym programem.

Funkcje biblioteki dynamicznej (DLL) mogą być jednocześnie (w tym samym czasie) importowane przez wiele programów (stąd określenie: biblioteka współdzielona), dzięki temu pamięć operacyjna jest mniej obciążona. Biblioteki DLL mogą być importowane statycznie bądź dynamicznie. W przeciwieństwie do bibliotek statycznych, które są łączone z programem w czasie jego konsolidowania, biblioteki DLL importowane statycznie są oddzielnym fragmentem programu i ich modyfikacja nie wymaga przeprowadzenia ponownej konsolidacji, jednak problem z biblioteką (brak importowanych funkcji lub problem z wczytywaniem biblioteki) całkowicie uniemożliwia uruchomienie programu. Biblioteki importowane dynamicznie są wczytywane do pamięci operacyjnej dopiero w momencie określonym przez programistę (przeważnie gdy faktycznie są potrzebne) - stąd określenie: biblioteka dynamicznie łączona - przez co pliki DLL często są wykorzystywane w różnych programach jako wtyczki.

W systemie Windows biblioteki DLL mają rozszerzenia .dll, .ocx (gdy biblioteka jest kontrolką ActiveX), .cpl (gdy biblioteka jest rozszerzeniem Panelu Sterowania), .drv (gdy jest przestarzałym sterownikiem), i mogą być wykorzystane w programach napisanych w różnych językach przeznaczonych na platformę Windows, m.in. w Visual Basicu, C/C++/C#, Object Pascalu (Delphi) czy asemblerze.






Z czym mamy do czynienia w Twoim przypadku?
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: Tworzenie rozszerzeń programów

Nowy postprzez wargo » wtorek, 17 listopada 2009, 15:39

Piszę program z systemem wtyczek.
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
Podziękował : 12
Otrzymał podziękowań: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    NieznanyNieznana

Re: Tworzenie rozszerzeń programów

Nowy postprzez Cyfrowy Baron » wtorek, 17 listopada 2009, 15:53

Jeżeli tworzysz program tylko po to by samemu tworzyć do niego wtyczki, to nie ma to najmniejszego sensu, gdyż tylko TY będziesz tworzył do niego wtyczki, czyli zamiast wtyczek powinieneś tworzyć do niego zwykłe biblioteki.

Programy wykorzystujące wtyczki tworzy się po to by inni programiści mogli według własnych potrzeb tworzyć wtyczki rozszerzające możliwości programu i w takiej sytuacji powinieneś raczej skupić całą uwagę nad takim skonstruowaniem programu, by mógł on obsługiwać wtyczki stworzone przez innych, musisz też zadbać o dokumentację.
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: Tworzenie rozszerzeń programów

Nowy postprzez wargo » wtorek, 17 listopada 2009, 16:01

Nie robię tego tylko dla siebie: chcę by inni też rozszerzali program!
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
Podziękował : 12
Otrzymał podziękowań: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    NieznanyNieznana

Re: Tworzenie rozszerzeń programów

Nowy postprzez polymorphism » wtorek, 17 listopada 2009, 17:01

No to jeszcze raz przeczytaj mój przedostatni post i wyciągnij z niego odpowiednie wnioski.
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

Poprzednia strona

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