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

amiga-news.de Forum > Programmierung > Zugriff auf IntuitionBase Member? [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

30.08.2004, 12:04 Uhr

ZeroG
Posts: 1487
Nutzer
Hallo Leute, ich versuche gerade ein altes "Classic"-Programm auf OS4 umzubasteln. Bis auf eine Fehlermeldung compiliert es. Ich habe nun schon 2 Tage gesucht und finde den (wahrscheinlich einfachen) Fehler nicht. Hier ein kleines Beispielprogramm bei dem das ganze auch auftritt:

code:
#include <proto/exec.h>
#include <proto/intuition.h>
#include <intuition/intuitionbase.h>

struct Library *IntuitionBase;
struct IntuitionIFace *IIntuition;
struct Screen *testscreen;

int main(int argc, char **argv)
{
IntuitionBase = IExec->OpenLibrary("intuition.library",50);
IIntuition = (struct IntuitionIFace *)IExec->GetInterface(IntuitionBase, "main", 1, NULL);
testscreen = IntuitionBase->FirstScreen;
IExec->DropInterface(struct Interface *)IIntuition;
IExec->CloseLibrary(IntuitionBase);
return 0;

.

gcc -Wall -O3 -s test.c
test.c: In function "main":
test.c: structure has no member named "FirstScreen"

Was ich nicht verstehe da in intuition/intuitionbase.h ganz klar und deutlich steht das die IntuitionBase ein FirstScreen hat. Der Compiler scheint auch diese definition zu finden denn wenn ich den typ von meiner IntuitionBase änder merkt er das der typ nicht passt und verweist auf intuitionbase.h.

Schon mal danke im vorab.

[ - Antworten - Zitieren - Direktlink - ]

30.08.2004, 12:23 Uhr

melior
Posts: 160
Nutzer
Zitat:
struct Library *IntuitionBase;

Ich glaube nicht, daß "Library" ein Element "FirstScreen" besitzt. Da hast Du wohl einen Cast vergessen.

Tschüß André

[ - Antworten - Zitieren - Direktlink - ]

30.08.2004, 12:25 Uhr

thomas
Posts: 7717
Nutzer

Recht hat er.

Zitat:
struct Library *IntuitionBase;

Eine struct Library hat keinen FirstScreen. Nimmst du struct IntuitionBase, funktioniert's.

Du weißt sicher, daß der Zugriff auf IntuitionBase->FirstScreen eine ziemlich unsaubere Sache ist. Niemand verhindert, daß der Screen geschlossen wird, bevor oder während du drauf zugreifen möchtest.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

30.08.2004, 12:29 Uhr

Mad_Dog
Posts: 1944
Nutzer
Ich hab zwar selbst kein OS4, aber es ist wohl so, daß es reicht, bei älteren Sourcecodes einfach das Öffnen der Libraries wegzulassen und diese Aufgabe dem Compiler anvertraut.

--

http://www.norman-interactive.com

[ - Antworten - Zitieren - Direktlink - ]

30.08.2004, 13:16 Uhr

ZeroG
Posts: 1487
Nutzer
@melior, thomas: :glow: An die 250 Fehlermeldung beseitigt und bei der letzten sowas... Danke das ihr mir die Scheuklappen abgenommen habt :D

@thomas: jupp weis ich. Ist bei dem alten Teil durch abschalten des Taskswitchings gesichert. Bin aber am überlegen obs nicht reicht die Intuitionbase zu locken...

@Mad_Dog: Ja, das kann man automatisch machen lassen, muß man aber nicht.

[ - Antworten - Zitieren - Direktlink - ]

30.08.2004, 15:07 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von ZeroG:
@thomas: jupp weis ich. Ist bei dem alten Teil durch abschalten des Taskswitchings gesichert. Bin aber am überlegen obs nicht reicht die Intuitionbase zu locken...

Ja, genau dafür ist LockIBase ja da: um auf IBase zuzugreifen, ohne das gesamte MultiTasking abschalten zu müssen.
Vergiß nicht, daß sofort nach dem unlock'en der Pointer ungültig sein kann, wenn der Screen nicht auf anderem Weg (LockPubScreen) gelock't wurde.
Also muß ansonsten alles, was diese Daten benötigt, währenddessen getan werden, bzw. es muß eine Kopie der Daten angelegt werden, mit der man arbeitet.

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

[ - Antworten - Zitieren - Direktlink - ]

30.08.2004, 16:16 Uhr

gni
Posts: 1106
Nutzer
Zitat:
Holger:
genau dafür ist LockIBase ja da: um auf IBase zuzugreifen, ohne das gesamte MultiTasking abschalten zu müssen.
Vergiß nicht, daß sofort nach dem unlock'en der Pointer ungültig sein kann, wenn der Screen nicht auf anderem Weg (LockPubScreen) gelock't wurde.

Wenn die IntuitionBase per LockIBase() gesperrt wurde, können nur wenige (keine?) Funktionen der intuition.library benutzt werden, da das unweigerlich zum Deadlock führt.

[ Dieser Beitrag wurde von gni am 30.08.2004 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

30.08.2004, 16:33 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von gni:
Wenn die IntuitionBase per LockIBase() gesperrt wurde, können nur wenige (keine?) Funktionen der intuition.library benutzt werden, das das unweigerlich zum Deadlock führt.

Wenn man das Multitasking ausschaltet, kann man genausowenig machen. LockPubScreen sollte aber funktionieren, es ist die einzige sinnvolle Funktion, die einem in diesem Zusammenhang einfällt. Und sie wartet ja nicht, entweder ist lock möglich, oder nicht.

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

[ - Antworten - Zitieren - Direktlink - ]

30.08.2004, 17:31 Uhr

gni
Posts: 1106
Nutzer
Zitat:
Holger:
Zitat:
gni:
Wenn die IntuitionBase per LockIBase() gesperrt wurde, können nur wenige (keine?) Funktionen der intuition.library benutzt werden, das das unweigerlich zum Deadlock führt.

Wenn man das Multitasking ausschaltet, kann man genausowenig machen.
Darum ging es nicht. Die Frage ist, wie man sicher auf Werte der IB zugreifen kann. Das geht nur per LockIBase(), aber dann kann man mit diesen Werten (meist) nichts anfangen.
Zitat:
LockPubScreen sollte aber funktionieren, es ist die einzige sinnvolle Funktion, die einem in diesem Zusammenhang einfällt. Und sie wartet ja nicht, entweder ist lock möglich, oder nicht.
Ich habe keine Ahnung, was LockPubScreen intern macht. Wenn bei LockIBase nicht explizit steht, das man LockPubScreen aufrufen darf, bleibt ein Deadlock-Risiko wenn man es doch tut.

[ - Antworten - Zitieren - Direktlink - ]

30.08.2004, 20:53 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von gni:
Darum ging es nicht. Die Frage ist, wie man sicher auf Werte der IB zugreifen kann. Das geht nur per LockIBase(), aber dann kann man mit diesen Werten (meist) nichts anfangen.

Ich bin auch kein wandelndes RKM, sollte nichts dazu dokumentiert sein, dann bleibt als einzige Möglichkeit, LockIBase, namen des pubscreen kopieren, UnlockIBase, LockPubScreen mit Namen (nicht Screen Pointer).
Gab/Gibt es eigentlich Dokumentation zu dem theoretischen Semaphoren-Nummern Parameter der Lock-Funktion? Ich kann mich an keine erinnern, außer das 0 alle bedeutete (bzw. verwendet werden soll)...

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

[ Dieser Beitrag wurde von Holger am 30.08.2004 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Zugriff auf IntuitionBase Member? [ - Suche - Neue Beiträge - Registrieren - Login - ]


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