amiga-news DEUTSCHE VERSION
.
Links| Forums| Comments| Report news
.
Chat| Polls| Newsticker| Archive
.

amiga-news.de Forum > Programmierung > library aus progdir: laden [ - Search - New posts - Register - Login - ]

-1- [ - Post reply - ]

2010-04-04, 14:39 h

AGSzabo
Posts: 1663
User
hi,

ab welcher os-version wird das laden einer library aus progdir:libs/ unterschtützt? hat dabei die version in progdir:libs/ priorität oder die in libs:? der hintergrund ist der, dass mein programmpaket direkt nach dem entpacken schon ohne installation laufen soll. kann ich, um sicherzustellen dass zuerst in progdir:libs/ gesucht wird, statt "oxmaster.library" zum öffnen der library den namen so angeben: "progdir:libs/oxmaster.library"?

ags
--
Sam mini os4.1 -- e-uae 39bb2 -- A4000D 3.0 - 2mbchip/8mbfast - Ariadne_II - ide DVD und HD -- A500 3.1 (mkick) adide 50mb -- Duron 1200mhz Ubuntu Linux

[ Dieser Beitrag wurde von AGSzabo am 04.04.2010 um 14:41 Uhr geändert. ]

[ - Answer - Quote - Direct link - ]

2010-04-04, 18:34 h

p-OS
Posts: 131
User
hallo,

alle angaben ohne gewähr:

der progdir: assign existiert seit OS 2.0x

es werden zuerst die pfade hinter libs: durchsucht, dann erst progdir:

die verwendung absoluter pfade bei OpenLibrary() sollte funktionieren.

ich würde aber abraten: was ist, wenn zu einem späteren zeitpunkt in libs: eine aktuelle version der library existiert ? dann würde dein programm die veraltete verwenden !


[ - Answer - Quote - Direct link - ]

2010-04-04, 18:51 h

AGSzabo
Posts: 1663
User
hi p-OS!

danke für die info!

ich gehe gerade vom umgekehrten fall aus: in libs: ist die alte version der library installiert und in progdir: liegt nach dem entpacken des neuen archivs auch die neue library. damit kann der user mein programm vollkommen testen ohne die library installieren zu müssen. ist imo was wert so dass man den umgekehrten fall vernachlässigen kann. unter welchen umständen meinst du zb würde dein fall zutreffen?

ags
--
Sam mini os4.1 -- e-uae 39bb2 -- A4000D 3.0 - 2mbchip/8mbfast - Ariadne_II - ide DVD und HD -- A500 3.1 (mkick) adide 50mb -- Duron 1200mhz Ubuntu Linux

[ - Answer - Quote - Direct link - ]

2010-04-05, 02:05 h

p-OS
Posts: 131
User
du gehst ja offensichtlich davon aus, daß die library bereits in libs: existieren könnte, also dann wohl keine bibliothek, die speziell nur für dein programm genutzt wird, oder ?
wieso sollte nicht einige zeit, nachdem der nutzer dein programm installiert hat, von der bibliothek eine neure version erscheinen und installiert werden, z.B. weil ein andres programm die neuere benötigt ?
und selbst, wenn du explizit die in progdir:libs/ öffnest, kannst du nicht sicher sein.
denn was ist, wenn die ältere version in libs: bereits in den speicher geladen worden ist (von nem andren programm) ? dann würde deine version erst gar nicht geladen, sondern die im speicher verwendet und dort der open counter einfach um 1 hochgezählt.

du könntest ja dein programm aus einer batch datei heraus starten. diese überprüft anfangs, ob in libs: eine ältere version installiert ist und bietet dem anwender an, diese ggf zu ersetzen. ein direkter programmstart im anschluß ist aber auch dann nur sinnvoll, wenn die lib nicht bereits im speicher steht. (gg. hilft ein avail flush, sofern kein andres programm mehr darauf zugreift).

[ - Answer - Quote - Direct link - ]

2010-04-05, 09:22 h

ZeroG
Posts: 1487
User
@p-OS:
Zitat:
denn was ist, wenn die ältere version in libs: bereits in den speicher geladen worden ist (von nem andren programm) ? dann würde deine version erst gar nicht geladen, sondern die im speicher verwendet und dort der open counter einfach um 1 hochgezählt.
Das passiert nur wenn er OpenLibrary() 0, oder eine zu niedrige Mindestversion vorgibt - was ein Bug ist.

OpenLibrary() wird in diesem Fall wahrscheinlich einfach nur NULL zurück geben und das war es dann.

@AGSzabo:
Dein Programm sollte sowas erst gar nicht anfangen.

Wenn schon andere Programme installiert sind die im moment eine ältere Version der Library in LIBS: benutzen macht es mehr Sinn für den Benutzer wenn er gezwungen wird die Library in LIBS: gegen die neue zu ersetzen - die anderen Programme die er benutzt profitieren ja von der neuen Libraryversion (Bugfixes, optimierungen).

[ - Answer - Quote - Direct link - ]

2010-04-05, 15:49 h

AGSzabo
Posts: 1663
User
@ZeroG:

Es wäre total unkonventionell: das programm schaut vor dem öffnen nach ob die library mit mindesten der gewünschten version schon im speicher ist. wenn die laufende version kleiner ist, ruft es das Expunge() der im speicher befindlichen library auf und gibt die meldung aus:

"Eine ältere Version von OX ist aktiv. Bitte beende alle OX-basierten Programme und starte dieses Programm neu."

und wenn OX aus dem progdir erfolgreich geladen wurde:

"Wenn du die mit diesem Programm mitgelieferte OX-Version für alle OX-basierten Propgramme verfügbar machen willst, starte bitte den diesem Programm beiliegenden OX-Installer."

heppt das?

ags
--
Sam mini os4.1 -- e-uae 39bb2 -- A4000D 3.0 - 2mbchip/8mbfast - Ariadne_II - ide DVD und HD -- A500 3.1 (mkick) adide 50mb -- Duron 1200mhz Ubuntu Linux

[ - Answer - Quote - Direct link - ]

2010-04-05, 16:11 h

DaxB
Posts: 1422
User
@AGSzabo:
Würde ich nicht so "kompliziert" machen. Lass dein Programm einfach die neuste Library nachfragen/voraussetzen und wenn eine ältere Version läuft auf die neuere hinweisen. I.d.R. machen das alle Programme so, bzw. sollten sie.

Es gibt auch Programme/Patche die das öffnen von Libraries beeinflussen (guckst du z.B. in das MCP Guide - Patch "Library Search"). Bevor du irgend welche speziellen Sachen einbaust, die möglicherweise mit diesen Patches Probleme bereiten, lieber sein lassen. :)

[ Dieser Beitrag wurde von DaxB am 05.04.2010 um 16:18 Uhr geändert. ]

[ - Answer - Quote - Direct link - ]

2010-04-05, 16:59 h

cgutjahr
Posts: 2783
[Administrator]
Zitat:
Original von AGSzabo:
heppt das?

So etwas erledigt man normalerweise im Installationsskript, nicht im eigentlichen Programm. Letzteres prüft nur noch ob die benötigte Library-Version verfügbar ist.

Es gibt den Amiga seit 25 Jahren, und seit 25 Jahren (mehr oder weniger...) machen das alle so. Es ums Verrecken anders machen zu wollen, Libraries mit absoluten Pfaden zu öffnen, dem Anwender verwirrende Fehlermeldungen um die Ohren zu hauen - das ist schlicht Käse.
--
Delirium BBS

[ - Answer - Quote - Direct link - ]

2010-04-05, 18:11 h

geit
Posts: 332
[Former member]

Ich lese hier nur alte Library in libs und Neue in progdir. Es gibt aber noch einen dritten Fall.

Was ist wenn die alte Library bereits im Speicher ist? Dann kann man noch so lange pfade angeben. Die neue library wird nie geladen.

Die einzige sinnvolle Möglichkeit ist wie hier schon angesprochen das Hochsetzen und abfragen der Library version. Das muß man immer machen, sonst knallt es.

Geit

[ - Answer - Quote - Direct link - ]

2010-04-05, 18:40 h

AGSzabo
Posts: 1663
User
@geit:

> Was ist wenn die alte Library bereits im Speicher ist?

daher hatte ich angedacht, vorher vom hauptprogramm aus nachzusehen ob eine alte version im speicher ist... nur so zur information des benutzers. aber ein batchfile zur installation tut es imo nun auch...
--
Sam mini os4.1 -- e-uae 39bb2 -- A4000D 3.0 - 2mbchip/8mbfast - Ariadne_II - ide DVD und HD -- A500 3.1 (mkick) adide 50mb -- Duron 1200mhz Ubuntu Linux

[ - Answer - Quote - Direct link - ]

2010-04-06, 00:59 h

geit
Posts: 332
[Former member]
@AGSzabo:

Das wäre auch wieder ein Hack. Die Version abfragen ist die einzig sinnvole Lösung. Die API sollte stabil sein, damit sich die Funktionen die ältere Programme nutzen nicht mehr ändert. Dann gibt es die Probleme nicht. Wenn man jeder Version eine neue API verpaßt, dann kann man auch gleich eine neuen Namen vergeben. Aber das ist ziemlicher bullshit.

Also erst denken, dann veröffentlichen.

Geit


[ - Answer - Quote - Direct link - ]

2010-04-06, 10:23 h

Thore
Posts: 2266
User
Hm das war doch immer so:
OpenLibrary benutzen mit Versionsangabe. Wenn die 0 angegeben wird, ist die Version egal.
Wenn eine ältere in Libs: ist dann eben bei OpenLibrary die neue Version angeben. Ist eine Version bereits im Speicher, dann kann er die Lib im schlechtesten Fall nicht öffnen.

Im ProgDir:Libs/ soll auch nur eine "kompatible" Library rein. Ob sie älter oder neuer ist, spielt dabei weniger die Rolle. Das sollte dann aber nur die Ausnahme sein (bsp. wizard.library wo es verschiedene Arten gibt)

Im OpenLibrary sollten nie direkte Pfade verwendet werden, sondern lediglich der Name der Library.

[ - Answer - Quote - Direct link - ]

2010-04-06, 11:47 h

Holger
Posts: 8116
User
Zitat:
Original von cgutjahr:
Es gibt den Amiga seit 25 Jahren, und seit 25 Jahren (mehr oder weniger...) machen das alle so.

Es war auch ein Jahrzehnt lang üblich, Libraries ausschließlich in Kleinbuchstaben zu benennen. Dann gab es ein paar Leute, die ohne Grund diese Regel brechen mussten. Heute sind sie Kernentwickler des OS.

Also vielleicht könnte AGSzabo auf ähnliche Weise Karriere machen? ;)

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Answer - Quote - Direct link - ]


-1- [ - Post reply - ]


amiga-news.de Forum > Programmierung > library aus progdir: laden [ - Search - New posts - Register - Login - ]


.
Masthead | Privacy policy | Netiquette | Advertising | Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved.
.