У меня есть учебник о вызовах функций из dll c/C++, пример написан здесь с official tutorial.Методы вызова из C/C++ DLL с 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)
>>>
Этот пример работает, когда функция является внешним, однако, давайте предположим, что у меня есть ссылка на объект, и я хочу, чтобы вызвать функцию из этого объекта с Params, как я могу это сделать?
Я видел журнал всех сигнатур функций из 'dumpbin -exports', и я попытался использовать полное имя функции, и все же это не сработало.
Любые другие идеи будут благословлены.
Откуда вы знаете, что это не сработало? –
Я попытался активировать его таким же образом выше, как и в учебнике, просто заменив имя на подпись из экспорта, и я все еще получил сообщение об ошибке из журнала python, говорит, что он не может вызвать функцию «tuple» что-то ... Я не работаю на том же компьютере Я набираю его, так что все из памяти, если вам нужны какие-то конкретные данные, скажите мне –
Мне кажется, нам нужны детали; здесь мы устраняем неполадки. –