ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Programmierung > AOS4: Wo sind denn __cdecl und das AmigaOS definiert? | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- | [ - Beitrag schreiben - ] |
30.11.2010, 00:43 Uhr Reth Posts: 1858 Nutzer |
Hallo zusammen, versuche mich gerade an der Portierung eines GPL SDL-Programmes für WIN/LINUX. Da ich von SDL keine Ahnung habe gehts nur mühsam voran! Leider gibt es eine Funktion, die wohl unter Windows und Linux compiliert wird und das keyword __cdecl vorangestellt hat. Leider konnte ich in den Includes des AOS4 SDK kein #define dazu finden! Weiss jmd., wie man mit solchen Dingen auf dem Amiga verfährt? Ach ja und noch eine Frage: Der Autor bat mich meine Codeänderungen möglichst mit #ifdefs zu kapseln, damit er sie wieder bei sich einfügen kann! Gibt es für das AmigaOS auch ein #define wie für Windows (#ifdef WIN32)? Dank euch schon mal! Ciao [ - Antworten - Zitieren - Direktlink - ] |
30.11.2010, 08:18 Uhr Thore Posts: 2266 Nutzer |
Mach einfach #define __cdecl Damit wird das Schlüsselwort ignoriert. Für das Kapseln nimmst Du für AmigaOS die Preprozessor-Konstante: #ifdef __amigaos__ Und für MorphOS: #ifdef __morphos__ [ - Antworten - Zitieren - Direktlink - ] |
30.11.2010, 08:59 Uhr Reth Posts: 1858 Nutzer |
Danke!Zitat: Hm, aber das Schlüsselwort ist doch extra dafür da, dem Compiler hier den Hinweis zu geben, dass er hier C-Code mit bestimmten Verhaltensweisen generieren soll, oder? Brauch er das auf dem Amiga nicht? Dann kann ich doch auch das Schlüsselwort weglassen? Immerhin gibt es dieses Wort auch in einigen Amiga-Headern. Allerdings hab ich keinen gefunden, den ich einbinden kann! [ - Antworten - Zitieren - Direktlink - ] |
30.11.2010, 09:13 Uhr Thore Posts: 2266 Nutzer |
> Immerhin gibt es dieses Wort auch in einigen Amiga-Headern. Dann müsste es auch das zugehörige Define dazu geben. In der Regel gilt aber, was an solchen Schlüsselwörtern unbekannt ist probeweise per Define zu ignorieren oder ein ähnliches System-Pendent zu kopieren (z.B. von ppc Linux oder MorphOS). Soweit ich weiß ist __cdecl sowieso default, und kann auch weggelassen werden. [ Dieser Beitrag wurde von Thore am 30.11.2010 um 09:15 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
30.11.2010, 11:57 Uhr Reth Posts: 1858 Nutzer |
Zitat:Den hab ich leider nicht gefunden! Nur die hier beschriebenen Stellen. Zitat: Muss ich mir merken! [ - Antworten - Zitieren - Direktlink - ] |
30.11.2010, 12:22 Uhr tboeckel Posts: 124 Nutzer |
@Reth: __cdecl wird benötigt, wenn C-Code von C++-Code aufgerufen werden soll. Damit wird dann festgelegt wie die Parameter übergeben werden müssen (Stack, Register, etc). Siehe zB http://msdn.microsoft.com/en-us/library/zkwh89ks(VS.80).aspx Je nach dem für welches AmigaOS du compilierst gibt es unterschiedliche #defines. Bis auf OS2/3 hat jedes andere System sein eigenes: "__amigaos4__" für AmigaOS4, "__MORPHOS__" für MorphOS, "__AROS__" für AROS i386, ppc und x86_64). Generell sollten aber alle Compiler standardmäßig das Symbol "AMIGA" kennen. [ - Antworten - Zitieren - Direktlink - ] |
30.11.2010, 12:37 Uhr Thore Posts: 2266 Nutzer |
@Reth Kannst Du dein Ergebnis dann posten? Obs geklappt hat und wie du es dann gemacht hast. [ - Antworten - Zitieren - Direktlink - ] |
30.11.2010, 13:04 Uhr Reth Posts: 1858 Nutzer |
Zitat: Ja, bei MS hab ich das auch gefunden, nur im AOS4 SDK nicht. Dort wird dieses Schlüsselwort dennoch verwendet (s. verlinkten Thread aus meinem letzten Post). [ - Antworten - Zitieren - Direktlink - ] |
30.11.2010, 16:28 Uhr Thore Posts: 2266 Nutzer |
Probier doch das leere define mal aus [ - Antworten - Zitieren - Direktlink - ] |
30.11.2010, 17:36 Uhr ZeroG Posts: 1487 Nutzer |
@Reth: Wenn du mal etwas gesucht hättest, hättest du folgendes in den SDL-Includes gefunden: code:/* By default SDL uses the C calling convention */ #ifndef SDLCALL #if defined(__WIN32__) && !defined(__GNUC__) #define SDLCALL __cdecl #else #ifdef __OS2__ /* But on OS/2, we use the _System calling convention */ /* to be compatible with every compiler */ #define SDLCALL _System #else #define SDLCALL #endif #endif #endif /* SDLCALL */ Füge einfach code:in deinen Quelltext ein.#ifdef __amigaos4__ #define __cdecl #endif [ - Antworten - Zitieren - Direktlink - ] |
02.12.2010, 20:11 Uhr Reth Posts: 1858 Nutzer |
Zitat: Das hatte ich sogar! Allerdings hatte ich die oberste Zeile "/* By default... " übersehen (war vielleicht auch nicht im sichtbaren Bereich des Fensters)! @Thore: Der Leerdefine hilft. Klappt mit __amigaos4__ und mit dem Symbol AMIGA! [ - Antworten - Zitieren - Direktlink - ] |
-1- | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > AOS4: Wo sind denn __cdecl und das AmigaOS definiert? | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |