Hallöchen,
ich befasse mich gerade mit der Frage, wie man am besten häufig genutzte Prozeduren auslagert, um sie von vielen unterschiedlichen Programmen nutzen zu können.
Dabei steht zur Wahl:
- eine User-Library erstellen
- eine DLL erstellen
- einfach als PB-Sourcecode speichern und per includefile einbinden
Wichtig ist dabei auch der Aspekt, dass die Prozedur auch an andere weitergegeben werden können soll, diese also die Prozedur nutzen können für ihre eigenen Programme, aber ohne den Sourcecode manipulieren oder entziffern zu können.
Dabei fällt eigentlich der Sourcecode per Include schonmal raus, denn da könnte man den Source beliebig ändern. Aber für NUR eigene Projekte imo ganz nützlich, direkt als Code eingefügt.
Bei einer User-Lib ist es so eine Sache mit der Kompatiblität zu den einzelnen Versionen. 3.90 Libs können nicht mit 3.91 verwendet werden, und umgekehrt. Da besteht die Gefahr, dass es schnell durch Updates nicht mehr läuft. Wer das aber auf dem neuesten Stand immer hält, hat mit der User-Lib eine gute Möglichkeit die PB-Befehle zu erweitern, ohne dass man merkt, dass diese nicht direkt PB-eigene-Befehle sind.
Eine DLL bietet die Möglichkeit, den Source zu verschlüsseln (wie die User-Lib ja auch) und die Prozedur somit als Bibliothek mitzuliefern welche erst geöffnet werden muss. Nachteil der DLL ist, dass sie erst umständlich geöffnet und dann per CallFunction[Fast] gestartet werden muss, und Parameter etwas eingeschränkt sind (20 max. z.B.).
Außerdem wird eine DLL in der Regel ja als Datei mitgeliefert. (Kann man aber imo auch als binary einfügen, oder? Weiß da jemand was zu?)
Das wären mal meine Gedankengänge dazu. Habt ihr da eigene Erfahrungen gemacht, was besser wäre, und was sich leichter handhaben lässt?
Ich dachte nämlich daran, mal ein paar Winkel-Funktionen für 2D-Spiele zu veröffentlichen und suche daher auch eine geeignete Möglichkeit. User-Lib ist mir aufgrund der Kompatiblitätsproblemen eigentlich zu unsicher, aber wenn sich hier gute Gründe einfinden, eine Userlib einer DLL vorzuziehen, kann man ja nochmal drüber nachdenken.
mfg.
Sunny
Weitergabe von Prozeduren per DLL, User-Lib oder Source?
Ich persönlich finde Include am schönsten, auch für das Weitergeben,
denn so kann jeder Anfänger aus dem Source lernen und auch Fehler
fixen, die u.U. vorhanden sind.
Da wäre mal als ein Beispiel die MCI Include von GPI. So als Include kann
ich mir auch die einzelnen Befehle im MCI angucken und wenn etwas nicht
so will, wie ich, kann ich die Include auch analysieren. Das bietet mir
weder DLL noch Userlib.
denn so kann jeder Anfänger aus dem Source lernen und auch Fehler
fixen, die u.U. vorhanden sind.
Da wäre mal als ein Beispiel die MCI Include von GPI. So als Include kann
ich mir auch die einzelnen Befehle im MCI angucken und wenn etwas nicht
so will, wie ich, kann ich die Include auch analysieren. Das bietet mir
weder DLL noch Userlib.
Lars
The only problem with troubleshooting is, that sometimes the trouble shoots back.
P4 2,6Ghz, 512MB RAM, GeForce 6200, WinXP Pro SP2, PB V3.94
The only problem with troubleshooting is, that sometimes the trouble shoots back.
P4 2,6Ghz, 512MB RAM, GeForce 6200, WinXP Pro SP2, PB V3.94
Da eine DLL ja schon kompiliert ist, kann man die dann eigentlich auch von anderen Programmiersprachen aus öffnen und nutzen? Das wäre dann ja ein klarer Vorteil für die DLL gegenüber der User-Lib. Bisher haben sich ja alle für die Userlib ausgesprochen, und ein paar für Sourcecode.
Wäre auch hilfreich wenn ihr hier eure Entscheidung begründen würdet. Warum das eine und nicht das andere.
Wäre auch hilfreich wenn ihr hier eure Entscheidung begründen würdet. Warum das eine und nicht das andere.
-
- Beiträge: 6267
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
ganz klar UserLib: kein Umständliches rumschleppen von externen Dateien, keine sehr großartige Installation oder so, sofort verwendbar. Man muss seinen Sourcecode nichtmal abspeichern.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Ich bin für Inludes. Die kann man immer wieder an seine Bedürfnisse anpassen, falls sie doch nicht richtig funktioniert oder ein paar Sachen fehlen, die man vermisst. Außerdem kann man dadurch auch viel lernen.
DLLs wären mir zu umständlich zum Ansprechen, außer es ist eine Wrapper-Userlib dabei, aber dann kann man das ja gleich als Userlib machen.
Userlibs mag ich deswegen schon nicht, weil es schon viel zu viele gibt und man so langsam den Überblick verliert. Irgendwann benutzt jemand für seine Userlib zu machen noch die Befehle einer anderen Userlib, die auch schon Userlibs verwendet hatte oder sowas und dann wird das immer langsamer und größer und bliblablubb...
Seit Tailbite habe ich sowieso schon Angst vor der großen Userlib-Flut.
DLLs wären mir zu umständlich zum Ansprechen, außer es ist eine Wrapper-Userlib dabei, aber dann kann man das ja gleich als Userlib machen.
Userlibs mag ich deswegen schon nicht, weil es schon viel zu viele gibt und man so langsam den Überblick verliert. Irgendwann benutzt jemand für seine Userlib zu machen noch die Befehle einer anderen Userlib, die auch schon Userlibs verwendet hatte oder sowas und dann wird das immer langsamer und größer und bliblablubb...
Seit Tailbite habe ich sowieso schon Angst vor der großen Userlib-Flut.
- Andre
- PureBasic Team
- Beiträge: 1756
- Registriert: 11.09.2004 16:35
- Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10 - Wohnort: Saxony / Deutscheinsiedel
- Kontaktdaten:
Wenn der Source offengelegt werden kann/soll, dann sind Includes eindeutig die beste Wahl, da sowohl ein Lerneffekt für andere User möglich ist als auch eine Optimierung/Bug-Beseitigung.
Im anderen Falle würde ich UserLibs eindeutig vorziehen (davon natürlich auch wieder die ASM/C-optimierten und gesplitteten, die "TailBite-Kreationen" mit Abstrichen), da diese direkt in das fertige Executable eingebunden werden und nicht wie die Dlls extern mit rumgeschleppt werden.
DLLs sehe ich eigentlich nur dort im Vorteil, wenn diese NICHT bei PureBasic-Programmen eingesetzt werden sollen, also anderen Programmiersprachen oder als Plugin für existierende Anwendungssoftware.
Im anderen Falle würde ich UserLibs eindeutig vorziehen (davon natürlich auch wieder die ASM/C-optimierten und gesplitteten, die "TailBite-Kreationen" mit Abstrichen), da diese direkt in das fertige Executable eingebunden werden und nicht wie die Dlls extern mit rumgeschleppt werden.
DLLs sehe ich eigentlich nur dort im Vorteil, wenn diese NICHT bei PureBasic-Programmen eingesetzt werden sollen, also anderen Programmiersprachen oder als Plugin für existierende Anwendungssoftware.
- freedimension
- Admin
- Beiträge: 1987
- Registriert: 08.09.2004 13:19
- Wohnort: Ludwigsburg
- Kontaktdaten:
DLLs haben auch den Vorteil dass, sollten Sie mal funktionieren, sie relativ stabil sind und nicht mit einer neuen Version von PB unbrauchbar sind, wie schon des Öfteren geschehen.Andre hat geschrieben:DLLs sehe ich eigentlich nur dort im Vorteil, wenn diese NICHT bei PureBasic-Programmen eingesetzt werden sollen, also anderen Programmiersprachen oder als Plugin für existierende Anwendungssoftware.
Das Handling spricht allerdings sehr für die Userlibs und die Anpassbarkeit für die Includes. Es gibt halt keine "beste Lösung".