Ich habe hier ein Tutorial über den Aufruf von Funktionen aus einer c/C++ DLL, das Beispiel wird hier von der official tutorial geschrieben.Aufruf von Methoden aus C/C++ DLL mit Python
WINUSERAPI int WINAPI
MessageBoxA(
HWND hWnd,
LPCSTR lpText,
LPCSTR lpCaption,
UINT uType);
Here is the wrapping with ctypes:
>>>
>>> from ctypes import c_int, WINFUNCTYPE, windll
>>> from ctypes.wintypes import HWND, LPCSTR, UINT
>>> prototype = WINFUNCTYPE(c_int, HWND, LPCSTR, LPCSTR, UINT)
>>> paramflags = (1, "hwnd", 0), (1, "text", "Hi"), (1, "caption", None), (1, "flags", 0)
>>> MessageBox = prototype(("MessageBoxA", windll.user32), paramflags)
>>>
The MessageBox foreign function can now be called in these ways:
>>>
>>> MessageBox()
>>> MessageBox(text="Spam, spam, spam")
>>> MessageBox(flags=2, text="foo bar")
>>>
A second example demonstrates output parameters. The win32 GetWindowRect function retrieves the dimensions of a specified window by copying them into RECT structure that the caller has to supply. Here is the C declaration:
WINUSERAPI BOOL WINAPI
GetWindowRect(
HWND hWnd,
LPRECT lpRect);
Here is the wrapping with ctypes:
>>>
>>> from ctypes import POINTER, WINFUNCTYPE, windll, WinError
>>> from ctypes.wintypes import BOOL, HWND, RECT
>>> prototype = WINFUNCTYPE(BOOL, HWND, POINTER(RECT))
>>> paramflags = (1, "hwnd"), (2, "lprect")
>>> GetWindowRect = prototype(("GetWindowRect", windll.user32), paramflags)
>>>
Dieses Beispiel funktioniert, wenn die Funktion extern ist, aber nehmen wir an, ich habe einen Verweis auf ein Objekt, und ich möchte mit params von diesem Objekt eine Funktion aufzurufen, wie kann ich das tun?
Ich habe das Protokoll aller Funktionssignaturen von 'Dumpbin - Exports' gesehen, und ich habe versucht, den vollen Namen der Funktion zu verwenden, und es hat immer noch nicht funktioniert.
Alle anderen Ideen wären gesegnet.
Woher wissen Sie, dass es nicht funktioniert hat? –
Ich versuchte es auf die gleiche Weise oben als das Tutorial zu aktivieren, nur den Namen mit einer Signatur aus den Exporten zu ersetzen, und ich erhielt immer noch einen Fehler von Python-Protokoll, sagt es nicht die Funktion, 'Tupel' etwas nennen ... Ich arbeite nicht auf dem gleichen Computer ich tippe es, so ist es alles aus dem Speicher, wenn Sie bestimmte Daten benötigen, sagen Sie mir –
Ich denke, wir brauchen Details; Wir machen hier eine Fehlerbehebung. –