Zum Hauptinhalt springen

DllLoad

Der Befehl lädt die in (alpha1) übergebene Dynamic Link Library (Windows - DLL) oder das Shared Object (Linux - SO) in den Speicher. Der Name der Bibliothek kann unter Windows ohne Dateierweiterung (.DLL) angegeben werden. In (alpha2) kann der Name der Einstiegsfunktion in der Bibliothek definiert werden. Wird keine Einstiegsfunktion angegeben, wird die Funktion C16_DLLCALL angesprungen.

Wird die Bibliothek vom SOA-Service mit dem Konfigurationseintrag c16_proc_library vorgeladen, wird in (alpha1) eine leere Zeichenkette übergeben.

Als Resultat wird der Deskriptor der Bibliothek zurückgegeben. Wurde die Bibliothek oder die Einstiegsfunktion nicht gefunden, wird _ErrGeneric zurückgegeben.

Mit der Eigenschaft FsiError des _Sys-Objektes kann der Fehler, der vom Betriebssystem geliefert wird, abgefragt werden. Häufige Fehler sind:

  • 126 - DLL nicht vorhanden, bzw. eine von der DLL referenzierte DLL ist nicht vorhanden.
  • 127 - DLL-Einstiegsfunktion (alpha2) ist nicht vorhanden.
  • 193 - DLL ist beschädigt oder Plattform stimmt nicht überein (32-/64-bit).

Nach dem Laden der Bibliothek kann mit dem Befehl ``DllCall() die Einstiegsfunktion aufgerufen werden.

Beispiel:

tDllHdl # DllLoad('c:\c16\dll\mydll', 'C16_DLLCALL');
if (tDllHdl <= _ErrOk)
{
// Betriebssystem-Fehlerwert abfragen
tErrOS # _Sys->spFsiError;
tText # ErrMapText(tErrOS, '*U', _ErrMapSys) + ' (' + CnvAI(tErrOS) + ')';
...
}
else
{
...
DllUnload(tDllHdl);
}
info

Hat die geladene Bibliothek abhängige Bibliotheken, genügt es nicht wenn diese im gleichen Verzeichnis liegen. Die Abhängigkeiten müssen in einem Ordner liegen, der in der Umgebungsvariable Path (Windows) bzw. LD_LIBRARY_PATH (Linux) enthalten ist, oder mit FsiPathChange() als aktuelles Verzeichnis definiert wird.