amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Hilfe bei Catalogen !! [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

02.12.2003, 11:28 Uhr

JensB
Posts: 193
Nutzer
Hi,

habe ein Problem beim öffnen von Catalogen . Die Library läßt sich ja noch öffnen aber beim Catalog ist dann schluß ,dann bleibt er einfach an der Stelle stehen . Muß dazu sagen das beispiel hab ich mal nur schnell aus dem Kopf eingtipt .So hatte ich es auch in E damals geöffnet. Noch was,MUI ist da auch noch im Spiel.
Bevor jetzt jemand sagt such doch mal im archiv ,hab i schon, grins.
Und mit CatComp will ich nicht da ich das Grundlegende begreifen will.


#include <libraries/locale.h>
#include <proto/locale.h>
#include <.........
..................>


struct LocaleBase *localbase=NULL;
struct Catalog *mycatlog =NULL;

void main()
{
// hier vor sind noch intuition,dos,muimaster und utiltiy libraries
if (!(localbase=(struct Library *)OpenLibrary("locale.library",37)) {fehler(OPENLIB);}
// und hier is schluss ,SnoopDos sagt dann nur noch ca. 500x FindSem.... ,der Catalog wird garnicht erst versucht zu öffnen
mycatalog=OpenCatalog(NULL,"test.catalog",NULL);

if (mycatalog) CloseCatalog(mycatalog);
if (localbase) CloseLibrary(localbase);
}

Ich hoffe ihr könnt mir da Helfen !

Mfg JensB

[ - Antworten - Zitieren - Direktlink - ]

02.12.2003, 12:05 Uhr

thomas
Posts: 7716
Nutzer

Eigentlich funktioniert das so. Die einzige Anmerkung ist, daß die Variable für LocaleBase wirklich exakt "LocaleBase" heißen muß und nicht localbase oder irgendwas anderes. Aber das müßte der Compiler schon bemängeln, deshalb hast du das vermutlich richtig gemacht.

Hier ist das Programm, das definitiv funktionier (habe ich gerade ausprobiert):

code:
#include <libraries/locale.h>
#include <proto/locale.h>
#include <proto/exec.h>

struct Library *LocaleBase=NULL;
struct Catalog *mycatalog =NULL;

void main (void)
{
if (LocaleBase=(struct Library *)OpenLibrary("locale.library",37))
	mycatalog=OpenCatalog(NULL,"test.catalog",NULL);

if (mycatalog) CloseCatalog(mycatalog);
if (LocaleBase) CloseLibrary(LocaleBase);
}


Gruß Thomas
--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/

[ - Antworten - Zitieren - Direktlink - ]

02.12.2003, 12:13 Uhr

JensB
Posts: 193
Nutzer
Danke ,werds mal Probieren !

Ähm das mit der LocaleBase/localbase hat er ja bemängelt und zwar das
die LocaleBase schon mal deklariert ist und zwar in (glaub ich jetzt)
proto/locale.h und deswegen bin ich ausgewichen.

Jep geht !

Noch ne andere Frage !
Woher weiß ich denn wie ich die Library am anfang deklarieren soll.

So,

struct LibraryBase *LibraryBase=NULL;

oder so,

struct Library *LibraryBase=NULL;

Es ist in Beispielen immer anders ,mal so und mal so.

Mfg JensB

[ Dieser Beitrag wurde von JensB am 02.12.2003 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

02.12.2003, 12:35 Uhr

thomas
Posts: 7716
Nutzer

Am besten deklarierst du sie als

void *XyzBase;

Das erinnert dich daran, daß die Library-Base eine Black-Box ist, die dich nichts angeht.

Wenn du Felder der Library-Struktur auslesen mußt, z.B. die Version, dann kannst du sie als struct Library deklarieren. Und wenn du Felder auslesen mußt, die zu dieser speziellen Library gehören, dann mußt du sie als struct XyzBase deklarieren.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/

[ - Antworten - Zitieren - Direktlink - ]

02.12.2003, 12:40 Uhr

tokai
Posts: 1071
Nutzer
Zitat:
Original von JensB:

struct LibraryBase *LibraryBase=NULL;

oder so,

struct Library *LibraryBase=NULL;

Es ist in Beispielen immer anders ,mal so und mal so.


grundsätzlich funktioniert "struct Library *LibraryBase=NULL;"

allerdings haben einige Libraries erweiterte Möglichkeiten:

code:
struct SomeLibraryBase
{
    struct Library LibNode;  

    /* now some additional extra data */

    ULONG  blabla;
    struct blabla  bla;
    ...
}


Und mit SomeLibraryBase = (struct SomeLibraryBase *)OpenLibrary() erhälst du so auch gleich einen Zeiger auf die erweiterten Daten, den du mit der normalen Methode nicht erhalten würdest.

Normalerweise sind das die Libraries, die auch ein extra Verzeichnis bei den OS includes haben (also die, die nicht mit in den allgemeinen libraries/ reingepackt wurden :) z.B.: intuition, exec, etc. ->
struct IntuitionBase, struct ExecBase, etc.

regards,
tokai
--
http://www.christianrosentreter.com



IRC: #amiganews.de @ARCNET (e.g. de3.arcnet.vapor.com/ port 6667)

[ Dieser Beitrag wurde von tokai am 02.12.2003 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

02.12.2003, 13:22 Uhr

gni
Posts: 1106
Nutzer
Zitat:
thomas:
void *XyzBase;

APTR XyzBase ;-)

Bei lokalen Librarybasen ist der Typ egal. Wenn ich nichts aus der Basis brauche, dann nehme APTR. Bei globalen Symbolen wirds schon schwieriger, da man da schnell Typ Konflikte bekommt.

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Hilfe bei Catalogen !! [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.