DllLoad
DllLoad(alpha1[, alpha2]) : handle
DLL oder SO laden
Details
- alpha1: Pfad und Name der DLL (Windows) oder des SO (Linux)
- alpha2: Name der Einstiegsfunktion (optional)
- Resultat:
handleDeskriptor oder_ErrGeneric - Siehe: Verwandte Befehle ,
DllCall (),DllUnload ()
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);
}
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.