![]() |
ENGLISH VERSION |
|
![]() |
Links | | | Forum | | | Kommentare | | | News melden |
![]() |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
![]() |
amiga-news.de Forum > Programmierung > Probleme mit Beispielprogramm für Rastport | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- | [ - Beitrag schreiben - ] |
29.08.2002, 09:43 Uhr Emufreak Posts: 74 Nutzer |
Ein kleines Beispielprogramm, dass ich aus dem grossen C-Buch abgetippt habe funktioniert nicht. Das Programm sollte einen String in einem Window ausgeben. Das Programm lässt sich Problemlos Compilieren. Wenn ich das Programm dann aber starte, ist kein String zu sehen sondern nur ein kleiner Blinkender Punkt im Windowrand. Wenn ich die Werte für die Position des Strings verändere, verschiebt sich der blinkende Punkt im Fenster Vertikal. Horizontal tut sich gar nichts. Der blinkende Punkt bleibt immer im Windowrand. Ähnliche Probleme habe ich bei allen Programmmen mit Rastport. Hier das ganze Beispielprogramm: #include <exec/types.h> #include <intuition/intuition.h> struct IntuitionBase *IntuitionBase; struct Window *FirstWindow; struct IntuiMessage *message; struct RastPort *MeinesWindowsRastPort; struct NewWindow FirstNewWindow = { 160, 50, /* Left Edge, Top Edge */ 320, 200, /* Width, Height */ 0, 1, /* DetailPen, BlockPen */ CLOSEWINDOW, /* IDCMP Flags */ WINDOWDEPTH | WINDOWSIZING | WINDOWDRAG | WINDOWCLOSE | SMART_REFRESH, NULL, /* First Gadget */ NULL, /* Checkmark */ (UBYTE *)"Test Custom Screen", NULL, /* SCREEN */ NULL, /* BitMap */ 100, 50, /* Min Width, Height */ 640, 256, /* Max Width, Height */ WBENCHSCREEN /* Type */ }; struct IntuiText ErsterText = { 3, 0, /* FrontPen, BackPen */ JAM2, /* DrawMode */ 50, 50, /* LeftEdge, TopEdge */ NULL, /* Font */ (UBYTE *) "Systemprogrammierung auf dem Amiga!", NULL /* NextText */ }; main() { ULONG MessageClass; USHORT code; Open_All(); PrintIText(MeinesWindowsRastPort, ErsterText, 10L, 10L); FOREVER { if (message = (struct IntuiMessage *) GetMsg(FirstWindow->UserPort)) { MessageClass = message->Class; code = message->Code; ReplyMsg(message); switch(MessageClass) { case CLOSEWINDOW : Close_All(); exit(TRUE); break; } } } } Open_All() { if(!(IntuitionBase = (struct IntuitionBase *) OpenLibrary("intuition.library", NULL))) { printf("Keine Intuition Library gefunden!n"); Close_All(); exit(FALSE); } if(!(FirstWindow = (struct Window *) OpenWindow(&FirstNewWindow))) { printf("Window will nicht aufgehen!n"); Close_All(); exit(FALSE); } MeinesWindowsRastPort = FirstWindow->RPort; } Close_All() { if (FirstWindow) CloseWindow(FirstWindow); if (IntuitionBase) CloseLibrary(IntuitionBase); } [ - Antworten - Zitieren - Direktlink - ] |
29.08.2002, 10:04 Uhr thomas Posts: 7721 Nutzer |
Dummer Tippfehler, vermute ich. PrintIText benötigt einen Pointer auf IntuiText, nicht die Struktur selber, also PrintIText(MeinesWindowsRastPort, &ErsterText, 10L, 10L); Das wäre nicht passiert, wenn du die Prototypes mit einbinden würdest: unter OS1.3: #include <functions.h> unter OS2.0 oder besser: #include <clib/exec_protos.h> #include <clib/intuition_protos.h> Außerdem, wenn du Dice C benutzt (was ich Anfängern dringend empfehle), solltest du die Option -proto einschalten, die prüft nämlich, ob für alle aufgerufenen Funktionen ein Prototyp vorhanden ist. Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ - Antworten - Zitieren - Direktlink - ] |
30.08.2002, 20:06 Uhr Emufreak Posts: 74 Nutzer |
Zitat: [ - Antworten - Zitieren - Direktlink - ] |
31.08.2002, 09:56 Uhr Kronos Posts: 1168 Nutzer |
Prototypes sind die Definition einer Funktion, ohne den Inhalt der selben, also etwa so struct Window *OpenWindowTagList( CONST struct NewWindow *newWindow, CONST struct TagItem *tagList ); oder auch für eigene Funktionen: int foo(int foofoo, float fusch); Dadurch wird festgelegt welche Argumente die Funktion erwartet, und was sie zurückgibt. Der Quelltext für foo() kann dabei in einem anderen C-Quelltext enthalten sein, der seperat übersetzt wird. Beim Linken werden diese Teile dann automatisch zusammengesetzt. Im Falle von OpenWindowTagList() wird dann gegen die amiga.lib gelinkt, oder wenn du noch die (Compiler-spezifischen) pragmas eingebunden hast direkt durch einen Aufruf mit Register-Variablen ersetzt (das sollte dich aber voresrt nicht stören). DICE ? Darüber kann man ja jetzt denken wie man will, aber ich würde für den Anfänger dann doch schon eher StormC3 von der Dev_CD_2.1 (die Pflicht ist) empfehlen. MfG Kronos -- Only the good die young all the evil seem to live forever [ - Antworten - Zitieren - Direktlink - ] |
-1- | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > Probleme mit Beispielprogramm für Rastport | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
![]() |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2025 by amiga-news.de - alle Rechte vorbehalten. |
![]() |