Import : EndImport


Syntax
Import "Dateiname"
  FunktionsName.<Typ>(<Parameter>, [, <Parameter> [= StandardWert]...]) [As "SymbolName"]
  ...
  VariablenName.<Typ> [As "SymbolName"]
EndImport
Beschreibung
Für fortgeschrittene Programmierer. Import : EndImport ermöglicht das einfache Deklarieren externer Funktionen und Variablen aus einer Library (.lib) oder Objekt (.obj) Datei.

Sobald diese deklariert wurden, sind die importierten Funktionen wie jeder andere Befehl direkt zur Verwendung im Programm verfügbar. Der Compiler überprüft nicht, ob die Funktion tatsächlich in der importierten Datei existiert; wenn also ein Fehler auftritt, wird dieser direkt vom Linker mitgeteilt.

Dieses Feature kann die OpenLibrary()/CallFunction() Sequenz ersetzen, da sie einige Vorteile bietet: es erfolgt eine Typen-Überprüfung, die Anzahl an Parametern wird geprüft. Nicht wie bei CallFunction() können ohne Probleme Doubles, Fließkomma und Quad Variablen verarbeitet werden.

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 der importierte Funktionsname (Funktionssymbol) auf folgende Art und Weise 'dekoriert': _FunctionName@callsize(Funktionsname und Aufrufgröße). Dies sollte bei den meisten Funktionen funktionieren, welche die Standardaufruf Konvention (stdcall) verwenden. Wenn es sich bei der Library um eine C Library handelt und die Funktionen nicht stdcall entsprechen, sollte stattdessen die ImportC Variante verwendet werden. In diesem Fall wird das standardmäßige Funktionssymbol wie folgt 'dekoriert': _FunctionName (nur Funktionsname).

Die Pseudotypes können für die Parameter verwendet werden, jedoch nicht für den Rückgabewert.

Anmerkungen

Auf x64 gibt es nur eine Aufruf-Konvention, somit werden sich ImportC und Import auf die selbe Weise verhalten.

Beispiel

  CompilerIf #PB_Compiler_OS <> #PB_OS_Windows
    CompilerError "Dieses Beispiel funktioniert nur auf Windows"
  CompilerEndIf

  Import "User32.lib"
   
    ; Keine Notwendigkeit für die Verwendung von 'As' da PureBasic die Funktion
    ; korrekt dekoriert.
    ; Wir definieren die 'Flags' auch als optional, mit einem Standardwert 
    ; von 0 (wenn sie weggelassen werden).
    ;
    MessageBoxW(Window.i, Body$, Title$, Flags.i = 0)
    
  EndImport
  
  MessageBoxW(0, "Hello", "World") ; Wir geben keine Flags an    

Beispiel: Mit Pseudotypes

  CompilerIf #PB_Compiler_OS <> #PB_OS_Windows
    CompilerError "Dieses Beispiel funktioniert nur auf Windows"
  CompilerEndIf

  Import "User32.lib"
   
    ; 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.
    ;
    MessageBoxA(Window.i, Body.p-ascii, Title.p-ascii, Flags.i = 0)
                                                  
  EndImport
  
  MessageBoxA(0, "Hello", "World")