Prototypes
BeschreibungPrototype.<Typ> Name(<Parameter>, [, <Parameter> [= StandardWert]...])
Für fortgeschrittene Programmierer. Prototype ermöglicht das Deklarieren eines Typs, welcher eine Funktion abbildet (englisch "mapped"). Dies ist nützlich bei der Verwendung mit einer Variable, um einen Funktionszeiger zu erstellen (der Variablen-Wert wird die Adresse der aufzurufenden Funktion sein, und kann auf Wunsch verändert werden).
Dieses Feature kann die OpenLibrary() und CallFunction() Sequenz ersetzen, da sie einige Vorteile hat: Es erfolgt eine Typen-Überprüfung, die Anzahl an Parametern wird geprüft.
Anders als CallFunction() können Prototypes problemlos mit Doubles, Fließkomma und Quad Variablen umgehen. Um einfach den Zeiger einer Library-Funktion zu erhalten, verwenden Sie GetFunction().
Die letzten Parameter können einen Standard-Wert (muss ein konstanter Ausdruck sein) haben. Wenn also diese Parameter beim Funktionsaufruf weggelassen werden, wird der Standardwert verwendet.
Standardmäßig wird die Funktionen die Standardaufruf Konvention (stdcall) verwenden. Wenn der Funktionszeiger ein C üblicher ist, dann sollte stattdessen die PrototypeC Variante verwendet werden.
Die Pseudotypes können für die Parameter verwendet werden, jedoch nicht für den Rückgabewert.
Beispiel
Prototype.i ProtoMessageBox(Window.i, Body$, Title$, Flags.i = 0) If OpenLibrary(0, "User32.dll") ; 'MsgBox' ist eine Variable mit einem 'ProtoMessageBox' Typ ; MsgBox.ProtoMessageBox = GetFunction(0, "MessageBoxA") MsgBox(0, "Hello", "World") ; wir geben keine Flags an EndIf
Beispiel: Mit Pseudotypes
; Wir verwenden den 'p-unicode' Pseudotype für die String Parameter, da ; MessageBoxW() eine nur unter Unicode verwendbare Funktion ist. Der Compiler ; wird - sofern notwendig - die Strings automatisch nach Unicode konvertieren. ; Prototype.i ProtoMessageBoxW(Window.i, Body.p-unicode, Title.p-unicode, Flags.i = 0) If OpenLibrary(0, "User32.dll") ; 'MsgBox' ist eine Variable mit einem 'ProtoMessageBoxW' Typ ; MsgBox.ProtoMessageBoxW = GetFunction(0, "MessageBoxW") MsgBox(0, "Hello", "World") ; wir geben keine Flags an EndIf