gpt4 book ai didi

python - 调用 c++ 库时,如何使用 ctypes 在 Python 中传递一个字节作为引用?

转载 作者:太空宇宙 更新时间:2023-11-04 12:46:22 25 4
gpt4 key购买 nike

我一直在努力弄清楚如何将一些 C++ 函数导入 Python。我让它们工作,直到其中一个函数需要通过引用传递其属性之一,而我无法弄清楚如何使其工作。我一直在遵循此处给出的建议:https://stackoverflow.com/a/252473/7447849在我尝试这个之前,它一直运行良好:

我有以下 C++ 函数:

bool __stdcall I2CRead(int Instance,  BYTE SlaveAddress, BYTE registerAddress, BYTE* ReadBuff, BYTE Length)

这是我试过的代码:

i2cread_proto = ctypes.WINFUNCTYPE (ctypes.c_bool, ctypes.c_int, ctypes.c_byte, ctypes.c_byte, ctypes.c_byte, ctypes.c_byte)
i2cread_Params = (1, "instance", 0),(1, "SlaveAddress", 0),(1, "registerAddress", 0),(1, "ReadBuff", 0),(1, "Length", 0), # (parameter direction (1 for input, 2 for output), parameter name, default value)

i2cread = i2cread_proto (("I2CRead", qsfp_lib), i2cread_Params)

readBuff = ctypes.c_byte(0)

if (i2cread(0, 160, address, readBuff, 1)==True):
print(readBuff)
else:
print('Could not read data')

此代码有效,但 readBuff 保持相同的默认值,而不是按应有的方式更改。

我尝试使用 byref() 但仍然无法正常工作(它给了我错误的类型错误)。

关于我可能做错的任何见解?我对 Python 不是很熟练,所以可能我误解了一个概念

最佳答案

未经测试。确保您使用正确的参数类型。

from ctypes import *
dll = WinDLL('dllname')
dll.I2CRead.argtypes = c_int,c_ubyte,c_ubyte,POINTER(c_ubyte),c_ubyte
dll.I2CRead.restype = c_bool

output = (c_ubyte * 256)() # Create instance of a c_ubyte array to store the output.
result = dll.I2CRead(1,2,3,output,len(output))

关于python - 调用 c++ 库时,如何使用 ctypes 在 Python 中传递一个字节作为引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51325695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com