amiga-news 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:
Original von Thore:
Mach einfach
#define __cdecl

Damit wird das Schlüsselwort ignoriert.


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:
Original von Thore:
> Immerhin gibt es dieses Wort auch in einigen Amiga-Headern.

Dann müsste es auch das zugehörige Define dazu geben.

Den hab ich leider nicht gefunden! Nur die hier beschriebenen Stellen.

Zitat:
Original von Thore:
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.


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:
Original von tboeckel:
@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


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:
#ifdef __amigaos4__
#define __cdecl
#endif

in deinen Quelltext ein.

[ - Answer - Quote - Direct link - ]

2010-12-02, 20:11 h

Reth
Posts: 1860
User
Zitat:
Original von ZeroG:
@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 */



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.
.