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