![]() |
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: 1488 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: 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: 7721 Nutzer |
Recht hat er. Zitat: 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: 1488 Nutzer |
@melior, thomas: ![]() ![]() @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: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: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: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: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: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: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-2025 by amiga-news.de - alle Rechte vorbehalten. |
![]() |