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

amiga-news.de Forum > Programmierung > Zugriff auf IntuitionBase Member? [ - Search - New posts - Register - Login - ]

-1- [ - Post reply - ]

2004-08-30, 12:04 h

ZeroG
Posts: 1487
User
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.

[ - Answer - Quote - Direct link - ]

2004-08-30, 12:23 h

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

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

Tschüß André

[ - Answer - Quote - Direct link - ]

2004-08-30, 12:25 h

thomas
Posts: 7718
User

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/

[ - Answer - Quote - Direct link - ]

2004-08-30, 12:29 h

Mad_Dog
Posts: 1944
User
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

[ - Answer - Quote - Direct link - ]

2004-08-30, 13:16 h

ZeroG
Posts: 1487
User
@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.

[ - Answer - Quote - Direct link - ]

2004-08-30, 15:07 h

Holger
Posts: 8116
User
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.

[ - Answer - Quote - Direct link - ]

2004-08-30, 16:16 h

gni
Posts: 1106
User
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. ]

[ - Answer - Quote - Direct link - ]

2004-08-30, 16:33 h

Holger
Posts: 8116
User
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.

[ - Answer - Quote - Direct link - ]

2004-08-30, 17:31 h

gni
Posts: 1106
User
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.

[ - Answer - Quote - Direct link - ]

2004-08-30, 20:53 h

Holger
Posts: 8116
User
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. ]

[ - Answer - Quote - Direct link - ]


-1- [ - Post reply - ]


amiga-news.de Forum > Programmierung > Zugriff auf IntuitionBase Member? [ - Search - New posts - Register - Login - ]


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