Zum Hauptinhalt springen

DllLoad

DllLoad(alpha1[, alpha2]) : handle

Ausführbar von Clients mit grafischer Oberfläche Ausführbar vom Server Ausführbar von Clients mit Programmierschnittstelle Ausführbar von der Web-Schnittstelle Ausführbar vom Druckprozessor Ausführbar von der ODBC-Schnittstelle Ausführbar vom SOA-Service

DLL oder SO laden

Details

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.