Hilfe

CallDLL

B2D B+ B3D

Aufruf

wert = CallDLL (dll$, funktion$ [, eingabe] [, ausgabe])

Parameter

dll$ Name der DLL-Datei
funktion$ Name der DLL-Funktion
eingabe Identität einer Bank mit Eingabewerten
ausgabe Identität einer Bank mit Ausgabewerten


Rückgabewert

Ausgabewert wird zurückgeliefert (Integer). Zusätzlich werden Werte in der Ausgabebank gespeichert.


Beschreibung

Die Funktion CallDLL führt eine bestimmte Prozedur in einer bestimmter DLL Datei aus. Die DLL Prozeduren sind wie BB Funktionen und können nicht nur Daten verarbeiten, sondern auch Aktionen ausführen (z.B. Windows Neustart).

Gebe einfach den Dateinamen einer DLL Datei an. Der Prozedur Name muss in der DLL Datei enthalten sein (Groß-/Kleinschreibung beachten!).

Die optionalen Parameter "Eingabe" und "Ausgabe" sind die Identitäten von 2 Speicherfeldern (banks). Diese können Daten für die Ein-/Ausgabe enthalten.

Dieser Befehl stammt noch aus der Zeit als Blitzbasic keine "UserLibs" nutzen konnte. Da es sich hier fast immer um "Wrapper" handelt die auf eine andere DLL wrappen kommt es zu Tempoverlusten. Es wird daher dringend geraten nur die "echten" Standard DLLs mit "UserLibs" zu nutzen und auf solche zusätzliche CallDLL Wrapper zu verzichten wenn es möglich ist.


Es können nicht alle DLLs einfach so benutzt werden. Die DLLs müssen speziell für BlitzBasic entwickelt werden. BlitzBasic übergibt/empfängt nur den Pointer eines Speicherfeldes und die Länge in Byte. Die DLL Funktion muss diese Daten dann verarbeiten können. Aus diesem einfachen Grund können Standard DLLs nicht benutzt werden, da die meistens andere Eingaben erwarten.


Beispiel

Dies ist ein Prinzipbeispiel:

inbank = CreateBank (...)
outbank = CreateBank (...)

;Mit POKE-Befehlen Eingabedaten setzten

result = CallDLL ("dllname","dllfunc",inbank,outbank)

;Mit PEEK-Befehlen Ausgabedaten lesen



So könnte ein Visual-C++ Code für eine DLL aussehen:

extern "C"{
_declspec(dllexport) int _cdecl my_dll_func( const void *in,int in_size,void *out,int out_size );
}

"in"-Pointer zeigt auf die Eingabe-Speicherbank. "in_size"-Variable gibt die Länge der Daten an. "out"-Pointer zeigt auf die Ausgabe-Speicherbank. "out_size" gibt die Ausgabe-Länge an.

"cdecl"-Kennung deutet auf eine C-Declaration. "stdcall" kann seit v1.77 auch benutzt werden!


Siehe auch

ExecFile

Übersicht Grundlagen Sonstiges