簡體   English   中英

windll ctypes從python 2.7調用可變參數c函數在win64中起作用,但在win32中不起作用

[英]windll ctypes call variadic c function from python 2.7 works in win64 but not in win32

我在Windows 10-32和Windows 10-64上使用Python 2.7。

我正在將Python包裝器編寫為C編譯的stdcall(Windows)DLL(= mydll)。 我有2個版本的DLL-32位和64位。 64版本使用windll.mydll效果很好。 32版本對DLL上的所有功能使用相同的命令非常有效,但可變參數printf類的功能除外。

運行mydll.myvarfunc("Hello")

我收到ValueError: Procedure probably called with too many arguments (4 bytes in excess)

有沒有一種解決方法,該方法不涉及更改可變參數函數的C代碼?

在Win64上,只有一個ABI,因此WinDLL和CDLL沒有區別。 在Win32上,可變參數函數始終為__cdecl因此WinDLL使用了錯誤的調用約定。

解決此問題的一種方法:

import ctypes
stdcall_func = ctypes.WinDLL('mydll').stdcall_func
cdecl_func = ctypes.CDLL('mydll').cdecl_func

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM