amiga-news 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:
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!

[ - 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:
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!

[ - 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:
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).

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

in deinen Quelltext ein.

[ - Antworten - Zitieren - Direktlink - ]

02.12.2010, 20:11 Uhr

Reth
Posts: 1858
Nutzer
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!

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