1. Allgemeine Syntax
rc = RxFuncAdd(name, dll, entry)
Die eingebaute OS/2 Funktion RxFuncAdd (function add = Funktion hinzufügen) registriert systemweit die Funktion mit dem Namen name, die in der dynamischen Bibliothek (Dynamic Link Library = DLL) mit dem Namen dll (aber meistens ohne die Extension *.dll)unter dem Einsprungspunkt(entry point) entry enthalten ist. Ein Fuktionsergebnis von rc = 0 bedeutet (nur), daß die Registrierung in eine Liste erfolgreich war. Der Name von entry ist dabei sensitiv, daß bedeutet, daß falls der Name nicht exakt die Groß- und Kleinschreibung des Namens in der DLL wiedergibt, die Funktion nicht geladen werden kann. Wie gebau der Name des entry geschrieben wird, kann man mit der Routine EXEINFO(suche im helpdesk) ausgeben.
Der aktuelle Name vom 1. Argument name kann innerhalb der gültigen OS/2 Funktionen frei gewählt werden, so daß man meistens hier eine kürzere oder verständlichere Bezeichnung der Funktion wählen kann.
2. Externe REXX - Funktionen in einer DLL
Externe Funktionen, die als Funktionspaket in einer DLL gespeichert sind, können in einem Programm erts dann aufgerufen werden, wenn die verbindung zwischen dem Programm und der DLL hergestellt sind. Diese verbindung wird durch eine Registrierung einer Funktion mit RxFuncAdd erzeugt.
2. Wichtige Hinweise
RxfuncAdd prüft weder die Existenz der DLL dll noch ob die zu registrierende Funktion name und der Einsprungspunkt entry in der DLL vorhanden sind. Das Funktionsergebnis rc = 0 bedeutet lediglich, daß die Registrierung vorgenommen, d.h. daß die Funktion name in eine Speichertabelle eingetragen wurde. Erst beim Aufruf der zu registrierenden Funktion wird festgestellt, ob die Funktion (im Arbeitsspeicher) vorhanden ist. Wenn nicht, wird der REX0043 Fehler ausgegeben. Der englische Text des Fehler lautet:
REX0043: ***Routine not found***
EXPLANATION: A function has been invoked within an expression (or
a subroutine has been invoked by a CALL) but it
cannot be found. No label with the specified name
exists in the program, it is not the name of a
built-in function, and the language processor has
been unable to locate it externally.
ACTION: Check for: - a mis-typed label or name
- a symbol or literal string adjacent to a '('
when it should have been separated by a
blank or some other operator (this would
be understood as a function invocation)
Siehe auch: http://www.howzatt.demon.co.uk/articles/12dec96.html
Im folgenden Kapitel werden Beispiele und Methoden gezeigt, wie man die oben genannten Defizite teilweise reduzieren kann.
Wer kann hierzu Ergänzungen und/oder Korrekturen vorbringen?
[ Leser: 115 ] |