Hilfe
CallDLL
Aufruf
Parameter
Rückgabewert
Beschreibung
Beispiel
Siehe auch
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!
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

