<< Pragmas
>> Welche Funktionen
Zun�chst sollte man sich versichern, da� die Funktion tats�chlich fehlt:
Z.B. Floating-Point-Funktionen befinden sich in einer speziellen
Link-Library, die erst mit der Option `-lm' eingebunden wird.
Ferner kann es eine fehlende Variable sein: Wenn man z.B. ohne es zu
bemerken eine Intuition-Funktion benutzt, dann wird der Linker �ber das
Fehlen eines Symbols IntuitionBase
klagen. In diesem Fall mu�
man also lediglich das Folgende irgendwo im globalen Teil seines
Quelltextes einbauen:
struct Library *IntuitionBase;
(Und vergessen Sie nicht, die Library mit OpenLibrary() zu er�ffnen und
mit CloseLibrary() zu schlie�en!) :-)
Allerdings k�nnte die Funktion nat�rlich tats�chlich fehlen. Wenn man zum
Beispiel nur die Version 2.0 der amiga.lib hat, dann fehlen etwa die
Locale-Funktionen oder die Memory-Pool-Funktionen, obwohl sie prinzipiell
verwendbar sind. (4)
Die einfachste (und beste) L�sung ist, das sogenannte NDU zu kaufen.
Siehe Abschnitt Wo bekomme ich die Amiga-Include-Dateien?. Wer nicht solange warten m�chte, f�r den ist die Frage,
welche Art von Funktion in seiner Link-Library fehlt:
- Einfache Amiga-Library-Funktionen (z.B. `exec/AllocPooled' oder
`locale/OpenCatalogA') kann man mit Pragmas aufrufen und braucht
dann lediglich Informationen �ber die Aufrufkonventionen (Library-Base,
Library-Vektor-Offset und Argumentregister)
- Tag-Funktionen sind meistens einfach Zwischenfunktionen, die ihre
Argumente auf dem Stack erwarten und dann die eigentliche Library-Funktion
aufrufen. Wenn man z.B. die Funktion `dos/AllocDosObject', die eine
Konstante und einen Zeiger auf ein Array als Argumente erwartet, nach
der obigen Methode konstruiert hat, dann hat man damit auch ihre
Stack-Variante! Dazu erzeugt man einfach die folgende Funktion:
#include <clib/dos_protos.h>
#include <pragmas/dos_pragmas.h> /* Evtl. anderer Name */
void *AllocDosObjectTags(ULONG objtype, Tag tag1, ...)
{ return(AllocDosObject(objtype, (struct TagItem *) &tag1);
}
Mit fd2pragma kann das auch automatisch geschehen. Siehe Abschnitt Was sind Pragmas?.
- Einige Funktionen bleiben aber noch �brig: Amiga.lib enth�lt n�mlich
auch Funktionen, die f�r sich selbst interessant sind, z.B. die
BOOPSI-Funktionen (`DoMethod', `DoSuperMethod'), die
Memory-Pool-Funktionen (`LibAllocPooled', `LibCreatePool', die
Ersatz f�r entsprechende 3.0-Funktionen sind) oder `HookEntry', das
sehr hilfreich bei der Programmierung von Hooks ist. Diese kann man nur
durch entsprechende, disassemblierte und neu assemblierte oder compilierter
Versionen ersetzen. Im AmigaFAQ-Archiv sind einige dieser Funktionen
bereits enthalten.
<< Pragmas
>> Welche Funktionen