TypeError: item 2 in _argtypes_ passes a union by value, which is unsupported.
时间: 2024-03-23 12:42:04 浏览: 139
这个错误通常是由于 ctypes 库在调用某个函数时无法处理 C 语言中的 union 类型所导致的。这种情况下,可以尝试使用 `ctypes.wintypes` 中定义的 `LP_` 类型来代替 union 类型,例如:
```python
from ctypes import *
from ctypes.wintypes import *
# 定义输入参数类型
class INPUT(Structure):
_fields_ = [
("type", c_ulong),
("ki", c_uint * 3)
]
# 构造输入参数
input = INPUT()
input.type = INPUT_KEYBOARD
input.ki[0] = VK_CAPITAL
# 调用 SendInput 函数
SendInput(1, byref(input), sizeof(INPUT))
```
这里我们使用了 `c_uint * 3` 来代替原来的 union 类型,这样就可以避免 `TypeError` 错误了。如果你遇到了其他问题,可以贴出详细的代码和错误信息,我可以帮你进一步调试。
相关问题
运行app = Application().start("D:\WeChat\WeChat.exe")时出现TypeError: item 2 in _argtypes_ passes a union by value, which is unsupported.
这个错误通常是由于 ctypes 库在调用某个函数时无法处理 C 语言中的 union 类型所导致的。这种情况下,可以尝试使用 `ctypes.wintypes` 中定义的 `LP_` 类型来代替 union 类型,例如:
```python
from ctypes import *
from ctypes.wintypes import *
# 定义输入参数类型
class INPUT(Structure):
_fields_ = [
("type", c_ulong),
("ki", c_uint * 3)
]
# 构造输入参数
input = INPUT()
input.type = INPUT_KEYBOARD
input.ki[0] = VK_CAPITAL
# 调用 SendInput 函数
SendInput(1, byref(input), sizeof(INPUT))
```
这里我们使用了 `c_uint * 3` 来代替原来的 union 类型,这样就可以避免 `TypeError` 错误了。如果你遇到了其他问题,可以贴出详细的代码和错误信息,我可以帮你进一步调试。
TypeError: AKConv.__init__() got an unexpected keyword argument 'in_chans'
这个`TypeError`表明你在调用`AKConv`的初始化方法(即`__init__()`)时,尝试传入了一个它不期待的关键字参数`in_chans`。在函数定义中,`in_chans`可能是作为位置参数而不是关键字参数存在的,这意味着它需要直接跟在函数名后面,而不是通过`keyword=value`的形式传递。
例如,如果`AKConv`的正确构造语法是:
```python
AKConv(out_chans=30, kernel_size, stride, padding, in_chans)
```
那么你应该按照这个顺序提供参数:
```python
self.ak = AKConv(out_chans=30, kernel_size=kernel_size, stride=stride, padding=padding, in_chans=in_chans_value)
```
其中`in_chans_value`是你想要给`in_chans`的值。
确保检查一下`AKConv`函数的文档,看看它的参数列表是否允许以这种方式传递`in_chans`,以及正确的参数位置。如果`in_chans`确实应该是作为位置参数,那么可能是在其他地方误用了`**kwargs`来接收它,这可能会导致混淆。
阅读全文