ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Programmierung > OS4 Progamm mit vbcc | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
1 2 3 -4- | [ - Beitrag schreiben - ] |
20.12.2007, 18:26 Uhr MaikG Posts: 5172 Nutzer |
>Um zu verhindern daß der autoopen-Code hinzugelinkt wird muß >struct CyberGfxIFace *ICyberGfx; >als globale Variable deklariert werden. Danke, jetzt geht es. >Beim GetInterface()-Aufruf muß "main" in Anführungszeichen stehen. Das hat man davon wenn man es aus migration pdf kopiert... >Speaking of preprocessor symbols, the compiler defines a preprocessor symbol when targeting AmigaOS 4.0: >_amigaos4__. You can use this symbol for optional compilation of >code. Gut, danke. >Das gilt natürlich nur gesetzt den Fall, die Compiler-Installation >ist hasenrein und nicht durch "geht nich, also löschen wir irgendwas, Das war die 1. umgebung, diese ist neu. >Schau mal in Dein SDK, ob Du diesen Teil in der Datei >"proto/cybergraphics.h" genau so wiederfindest. Sieht genauso aus. >Wenn du irgendeinen Teil davon nicht verstehen kannst darfst >du gerne Nachfragen, aber hör bitte damit auf immer zu behaupten >"Ich habs gelesen, aber das steht da nicht drin.". Ja das verstehen ist so eine sache als C-Anfänger und OS4-Anfänger... >Du versucht gerade einen Quelltext der für OS3 geschrieben wurde >zu einem OS4-Programm zu compilieren. Also machst du gerade ein >OS4 Programm, das sich selbstverständlich auch an die OS4 Regeln >zu halten hat. Klar soweit? Ja, aber src.c muss ohne änderungen weiterhin für OS3+WOS Compilierbar bleiben. >Kriegst du es hin ohne änderungen an dem Programm oder den >Systemheadern folgendes Beispiel fehlerfrei zu compilieren >und laufen zu lassen (linken gegen libauto.a nicht vergessen)? Compilieren ja, aber bin grade unter OS3.9 unterwegs. [ - Antworten - Zitieren - Direktlink - ] |
20.12.2007, 18:49 Uhr ZeroG Posts: 1487 Nutzer |
@MaikG:Zitat:Du hast dich verschrieben oder eine alte SDK-Version, bei mir steht korrekt "main". Zitat:Meine empfehlung ist das du dir ein gutes C-Buch für Einsteiger besorgst und das erstmal sehr gründlich durcharbeitest. Wenn das dann gut klappt gehts an die AmigaOS API. Es ist zwar möglich sofort zu rennen, im allgemeinen sollte man aber schon eine Zeit gelaufen sein bevor man es mit rennen versucht. Zitat:Das ist ja das schöne an __amigaos4__ damit kannst du soviel ändern wie du willst, wenn du für OS3 oder sonstwas compilierst sind die Änderungen nicht mehr für den Compiler sichtbar und spielen daher keine Rolle. [ - Antworten - Zitieren - Direktlink - ] |
20.12.2007, 19:51 Uhr gni Posts: 1106 Nutzer |
Zitat:Da fehlt wieder mal ein ADD Zitat: [ - Antworten - Zitieren - Direktlink - ] |
21.12.2007, 00:04 Uhr MaikG Posts: 5172 Nutzer |
>Du hast dich verschrieben oder eine alte SDK-Version, bei mir steht >korrekt "main". Ich hab es mittels Markieren, Kopieren vom OS4 PDF Anzeiger kopiert und Eingefügt. Das SDK habe ich erst kürzlich geladen. >Meine empfehlung ist das du dir ein gutes C-Buch für Einsteiger >besorgst und das erstmal sehr gründlich durcharbeitest. >Wenn das dann gut klappt gehts an die AmigaOS API. Ich hab den C-Kurs auf Papier... Ich benutze die AOS(3) API seit vielen Jahren, nur nicht mit C und AOS4. >Das ist ja das schöne an __amigaos4__ damit kannst du soviel >ändern wie du willst, wenn du für OS3 oder sonstwas compilierst >sind die Änderungen nicht mehr für den Compiler sichtbar und spielen >daher keine Rolle. Ja, sieht jetzt ganz gut aus. >Da fehlt wieder mal ein ADD Hast du ein paar Seiten nicht gelesen? War die alte Installation und da hatte ich das auch schon korregiert. [ Dieser Beitrag wurde von MaikG am 21.12.2007 um 00:04 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
21.12.2007, 17:49 Uhr MaikG Posts: 5172 Nutzer |
>Hätte ich jetzt fast vergessen: __USE_INLINE__ reicht normalerweise >völlig aus, um ehemalige 68K-Programme durch den VBCC oder GCC unter >OS4 zu bekommen. Stimmt, hatte die ganzen sachen von der 1. Compiler Installation noch drin, wird jetzt tatsächlich nicht mehr benötigt. [ - Antworten - Zitieren - Direktlink - ] |
21.12.2007, 19:55 Uhr whose Posts: 2156 Nutzer |
@MaikG: heißt? Daß es nun mit __USE_INLINE__ tut, wie es das bei nahezu allen anderen auch tut? Wenn ja, wären wir ein gewaltiges Stück weiter und Deine vbcc-Installation wäre damit auch "koscher" und lustigen Porgrammierversuchen unter OS4 stünde nur noch wenig im Wege -- --- µA1 PPC 750GX-800 A4000 PPC 604e-233 [ - Antworten - Zitieren - Direktlink - ] |
21.12.2007, 22:23 Uhr MaikG Posts: 5172 Nutzer |
>heißt? Daß es nun mit __USE_INLINE__ tut, wie es das bei nahezu >allen anderen auch tut? Ja, bei der ersten installation hab ich nicht alle Komponenten des SDK's kopiert. Da brauchte ich die anderen #define's noch. Ich hab es erst kürzlich rausgefunden das ich die mit der 2.Installation jetzt gar nicht mehr brauche. Natürlich muss ich trotzdem noch mit ein paar OS4 unterscheidungen arbeiten, z.B. ebend bei den Interface sachen. >Wenn ja, wären wir ein gewaltiges Stück weiter und Deine >vbcc-Installation wäre damit auch "koscher" und lustigen >Porgrammierversuchen unter OS4 stünde nur noch wenig im Wege Sag ich ja das die jetzt schon okay sein muss. [ - Antworten - Zitieren - Direktlink - ] |
22.12.2007, 05:19 Uhr whose Posts: 2156 Nutzer |
Zitat: Öhm... wenn __USE_INLINE__ seinen Dienst korrekt erledigt, brauchst Du die Interfaces einstweilen nicht. Das macht im Grunde nichts anderes, als auf die "altbewährte" Methode des Library-Einsprungs (zumindest sieht es der Compiler so) "zurückzuschalten". Wenn Du immer noch explizit Interfaces zu einer der "normalen" Libraries anlegen mußt, ist immer noch etwas nicht i.O. mit Deiner Installation. -- --- µA1 PPC 750GX-800 A4000 PPC 604e-233 [ - Antworten - Zitieren - Direktlink - ] |
22.12.2007, 08:36 Uhr thomas Posts: 7718 Nutzer |
@whose: Wenn du eine Library selbst öffnest, dann mußt du auch das Interface dazu besorgen. Da kommst du nicht drum herum, es sei denn, du generierst Auto-Open-Code für jede zusätzliche Library. Das wiederum beraubt dich der Möglichkeiten, den Benutzer über eine fehlende Library zu informieren, eine bestimmte Version vorauszusetzen und bestimmte Libraries optional einzusetzen. Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
22.12.2007, 10:32 Uhr whose Posts: 2156 Nutzer |
Zitat: Hm, bei "speziellen" Libraries ist das wohl so, deswegen schrieb ich oben auch von "normalen" Libraries. Die cybergraphics.library scheint inzwischen dazuzugehören. Allerdings weiß ich natürlich nicht, welche Libraries MaikG sonst noch verwendet, das stimmt. Ich weiß jetzt nicht, wie die OS4-libauto intern funktioniert, bei der libauto für die älteren Versionen des 68k-GCCs konnte man eine gewünschte Version im eigenen Quellcode vorgeben. Müßte ich nochmal nachschauen, wie die globalen Variablen dazu hießen, mit denen man das steuern konnte. Irgendwas wie z.B. "int __auto_intuition_vers" oder so ähnlich... ich könnte mir gut vorstellen, daß sich diese Vorgehensweise bei den beiden noch erhältlichen Compilern durchgesetzt hat. Bei optionalen Libraries und beim Öffnen "von Hand" allerdings hast Du Recht, da kommt er um bedingtes Compilieren nicht herum (und damit auch nicht um die Interfaces). -- --- µA1 PPC 750GX-800 A4000 PPC 604e-233 [ - Antworten - Zitieren - Direktlink - ] |
22.12.2007, 13:16 Uhr ZeroG Posts: 1487 Nutzer |
@whose: Die cybergraphics.library befindet sich nicht in den beiden libauto.a Varianten die beim SDK dabei sind. VBCC scheint seine eigene Version mitzubringen, da ist dann wohl auch CGX bei. Diese "int __auto_intuition_vers" Geschichte wird im moment wohl nicht unterstützt, obwohl es Sinn machen würde. Hier mal der autoinit-output von IDLTool am beispiel von CGX: code:/* ** $Id$ ** Generated by IDLTool 51.8 ** Do not edit ** ** AutoInit stub for cybergraphics ** ** (C) Copyright 2003-2005 Amiga, Inc. ** All Rights Reserved */ #include <exec/lists.h> #include <graphics/rastport.h> #include <graphics/view.h> #include <utility/tagitem.h> #include <utility/hooks.h> #include <interfaces/cybergraphics.h> #include <proto/exec.h> #include <assert.h> __attribute__((weak)) struct CyberGfxIFace * ICyberGfx = NULL; /****************************************************************************/ extern struct Library * CyberGfxBase; void __init_cybergraphics_main(void) __attribute__((constructor)); void __exit_cybergraphics_main(void) __attribute__((destructor)); /****************************************************************************/ void __init_cybergraphics_main(void) { struct Library * LibBase; if (CyberGfxBase == NULL) /* Library base is NULL, we need to open it */ { LibBase = IExec->OpenLibrary("cybergraphics.library", 0L); assert(LibBase != NULL); } else { LibBase = CyberGfxBase; } ICyberGfx = (struct CyberGfxIFace *)IExec->GetInterface((struct Library *)LibBase, "main", 1, NULL); assert(ICyberGfx != NULL); } /****************************************************************************/ void __exit_cybergraphics_main(void) { if (ICyberGfx) IExec->DropInterface ((struct Interface *)ICyberGfx); } /****************************************************************************/ code:/* ** $Id$ ** Generated by IDLTool 51.8 ** Do not edit ** ** AutoInit stub for cybergraphics ** ** (C) Copyright 2003-2005 Amiga, Inc. ** All Rights Reserved */ #include <exec/lists.h> #include <graphics/rastport.h> #include <graphics/view.h> #include <utility/tagitem.h> #include <utility/hooks.h> #include <interfaces/cybergraphics.h> #include <proto/exec.h> #include <assert.h> /****************************************************************************/ __attribute__((weak)) struct Library * CyberGfxBase = NULL; void __init_cybergraphics_base(void) __attribute__((constructor)); void __exit_cybergraphics_base(void) __attribute__((destructor)); /****************************************************************************/ void __init_cybergraphics_base(void) { if (CyberGfxBase != NULL) return; /* Someone was quicker */ CyberGfxBase = IExec->OpenLibrary("cybergraphics.library", 0L); assert(CyberGfxBase != NULL); } /****************************************************************************/ void __exit_cybergraphics_base(void) { if (CyberGfxBase) IExec->CloseLibrary((struct Library *)CyberGfxBase); } /****************************************************************************/ [ - Antworten - Zitieren - Direktlink - ] |
1 2 3 -4- | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > OS4 Progamm mit vbcc | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |