Seite 2 von 2

Re: Eine Nichtypische Windows-Dll-Funktion aufrufen mit Pyth

Verfasst: Donnerstag 18. November 2010, 17:40
von jerch
FYI: Es funktionieren beide Aufrufkonventionen mit FreeBASIC und Python ctypes, sowohl cdecl als auch stdcall.

cdecl:

Code: Alles auswählen

FUNCTION multf CDECL ALIAS "multf" (c AS SINGLE) AS SINGLE EXPORT
    RETURN c*5
END FUNCTION

Code: Alles auswählen

>>> import ctypes
>>> p=ctypes.cdll.LoadLibrary('bla.dll')
>>> p.multf
<_FuncPtr object at 0x00A2EB70>
>>> multf=p.multf
>>> multf.restype=ctypes.c_float
>>> multf(ctypes.c_float(5.1))
25.5
stdcall:

Code: Alles auswählen

FUNCTION multf STDCALL ALIAS "multf" (c AS SINGLE) AS SINGLE EXPORT
    RETURN c*5
END FUNCTION

Code: Alles auswählen

>>> import ctypes
>>> p=ctypes.windll.LoadLibrary('bla.dll')
>>> multf = getattr(p, 'multf@4')
>>> multf.restype = ctypes.c_float
>>> multf(ctypes.c_float(5.1))
25.5

Re: Eine Nichtypische Windows-Dll-Funktion aufrufen mit Pyth

Verfasst: Donnerstag 18. November 2010, 19:01
von funkheld
Na, siehste, dann ist das Freebasic doch nicht so gemein... :D

Im Forum konnte bis jetzt noch keiner sagen wie die Reihenfolge ist beim Aufruf.

Danke.

Gruss

Re: Eine Nichtypische Windows-Dll-Funktion aufrufen mit Pyth

Verfasst: Donnerstag 18. November 2010, 19:03
von funkheld
Wie funktionieren da die Zeigerübergabe an die DLL, wo dann evtl Daten übergeben werden in der DLL.

Gruss

Re: Eine Nichtypische Windows-Dll-Funktion aufrufen mit Pyth

Verfasst: Donnerstag 18. November 2010, 22:43
von jerch
funkheld hat geschrieben:Wie funktionieren da die Zeigerübergabe an die DLL, wo dann evtl Daten übergeben werden in der DLL.
Verstehe leider den zweiten Teil der Frage nicht. Die Zeiger-Übergabe machst Du in Python z.B. mit ctypes.byref(). Gönn' Dir doch mal die 10min zum Durchlesen der ctypes-Einführung, da steht das alles mit Bsp. erklärt.
funkheld hat geschrieben:Im Forum konnte bis jetzt noch keiner sagen wie die Reihenfolge ist beim Aufruf.
Auf welche Reihenfolge spielst Du an? Reihenfolge der Parameter auf dem Stack?