DllPrepareCall()

Aus Wiki des Deutschsprachige Xbaseentwickler e. V.
Zur Navigation springen Zur Suche springen

Allgemeines

Die Funktion DllPrepareCall() dient dazu, APIs aus DLLs aufzurufen, die nicht den Xbase++ Standards entsprechen. Dies bedeutet, dass diese Funktion generell für alle API-Aufrufe zu verwenden ist, bei denen die DLL nicht mit Xbase++ erstellt wurde.

In Xbase++ erstellte DLLs verhalten sich wie normale Xbase++-Programm-Module und benutzen die gleichen Aufrufkonventionen.


Syntax

DllPrepareCall( <cDllName>|<nDllHandle>, [<nCallingConv>], <cFuncName>|<nOrdinal> ) --> cCallTemplate


Parameter

cDllName/nDllHandle - hier kann alternativ der Name der zu verwendenden DLL angegeben werden, oder ein DLL-Handle, wie er von der Funktion DllLoad() zurückgegeben wird.

nCallingConv - gibt an, welche Art der Aufruf des APIs haben soll:

figurative Konstante Umsetung
DLL_CDECL C calling convention
DLL_OSAPI Calling convention for the operating system API
DLL_STDCALL Standard for the Windows 32bit API
DLL_SYSTEM Standard for the OS/2 API
DLL_XPPCALL *) Calling convention for Xbase++ DLLs
  • ) DLL_XPPCALL ist der Unterlassungswert.

Durch Addition mit einem Wert aus der folgenden Tabelle kann neben der Calling Convention auch ein Calling Mode festgelegt werden:

figurative Konstante Umsetung
DLL_CALLMODE_NORMAL *) Fastest mode, original parameters passed
DLL_CALLMODE_COPY Safest mode, callee uses a copy of passed parameters
  • ) DLL_CALLMODE_NORMAL ist der Unterlassungswert.

cFuncName/nOrdinal - gibt den Namen des auszuführenden APIs an. Die alternative Angabe der Folgenummer des API beschleunigt den Aufruf, da in diesem Fall das API nicht erst in der Symboltablle der DLL gesucht werden muss.


Rückgabewert

cCallTemplate - es handelt sich um einen Binärstring, der als erster Parameter an DllExecuteCall() übergeben werden muss.


Querverweise

DllCall()

DllExecuteCall()

DllLoad()

DllUnload()


benötigte DLLs bzw. Include-Dateien

Dll.CH

XbpRT1.DLL


Anwendungsbeispiel

siehe hierzu das Beispiel in DllExecuteCall()