![]() |
DEUTSCHE VERSION |
|
![]() |
Links | | | Forums | | | Comments | | | Report news |
![]() |
Chat | | | Polls | | | Newsticker | | | Archive |
![]() |
amiga-news.de Forum > Programmierung > AOS4: Wo sind denn __cdecl und das AmigaOS definiert? | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2010-11-30, 00:43 h Reth Posts: 1860 User |
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 [ - Answer - Quote - Direct link - ] |
2010-11-30, 08:18 h Thore Posts: 2266 User |
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__ [ - Answer - Quote - Direct link - ] |
2010-11-30, 08:59 h Reth Posts: 1860 User |
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! [ - Answer - Quote - Direct link - ] |
2010-11-30, 09:13 h Thore Posts: 2266 User |
> 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. ] [ - Answer - Quote - Direct link - ] |
2010-11-30, 11:57 h Reth Posts: 1860 User |
Zitat:Den hab ich leider nicht gefunden! Nur die hier beschriebenen Stellen. Zitat: Muss ich mir merken! [ - Answer - Quote - Direct link - ] |
2010-11-30, 12:22 h tboeckel Posts: 124 User |
@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. [ - Answer - Quote - Direct link - ] |
2010-11-30, 12:37 h Thore Posts: 2266 User |
@Reth Kannst Du dein Ergebnis dann posten? Obs geklappt hat und wie du es dann gemacht hast. [ - Answer - Quote - Direct link - ] |
2010-11-30, 13:04 h Reth Posts: 1860 User |
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). [ - Answer - Quote - Direct link - ] |
2010-11-30, 16:28 h Thore Posts: 2266 User |
Probier doch das leere define mal aus ![]() [ - Answer - Quote - Direct link - ] |
2010-11-30, 17:36 h ZeroG Posts: 1488 User |
@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 [ - Answer - Quote - Direct link - ] |
2010-12-02, 20:11 h Reth Posts: 1860 User |
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! [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > AOS4: Wo sind denn __cdecl und das AmigaOS definiert? | [ - Search - New posts - Register - Login - ] |
![]() |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2025 by amiga-news.de - all rights reserved. |
![]() |