我正在尝试将C#程序转换为python。 DLL被包装在C中,我已经能够在所有函数上使用CTYPES,但我遇到了2个剩余函数的问题,它们非常相似。
功能
LONG SetMe(LONG Dev, BYTE Length, STRUCTURE_SETTINGS StructureSettings, void* data, DWORD dataSize);
参数 开发 - 输入 长度 - 输入 StructureSettings - 输入 数据 - 输出 dataSize - 输入
我能够运行该函数,DLL确实响应,但它不返回任何值。我该如何处理VOID指针返回?我真的想留在CTYPES领域。
这是包含结构信息的代码转储
class STRUCTURE_SETTINGS(Structure):
_fields_ = [
('T', c_byte),
('C', c_byte),
('I', c_byte),
('reserve', c_byte),
('Dev1', c_byte),
('Dev2', c_byte),
('Dev3', c_byte),
('Dev4', c_byte)]
Main Code....
Dev = 0
Length = 1
dataSize=4
data = ctypes.c_uint * dataSize
dataPointer = data()
StructureSettings = STRUCTURE_SETTINGS()
StructureSettings.T = 0x01
StructureSettings.C = 0x0
StructureSettings.I = 0x4
StructureSettings.Dev1 = 0x0
StructureSettings.Dev2 = 0x0
StructureSettings.Dev3 = 0x0
StructureSettings.Dev4 = 0x0
getFuncDLL = localDll.Setme
getFuncDLL.argtypes = [c_long, c_int, ctypes.POINTER(STRUCTURE_SETTINGS), c_void_p, c_ulonglong]
getFuncDLL.restype = c_long
getFuncDLLreturn = getFuncDLL(Dev, Length, StructureSettings, data, dataSize)
getFuncDLLreturn....for error return codes
data is the value the I am looking for.
答案 0 :(得分:-1)
该问题的解决方案是删除以下行:
getFuncDLL.argtypes = [c_long,c_int,ctypes.POINTER(STRUCTURE_SETTINGS),c_void_p,c_ulonglong] getFuncDLL.restype = c_long