【发布时间】:2014-02-06 01:18:23
【问题描述】:
我正在尝试将 C# 程序转换为 python。 DLL 用 C 封装,我已经能够在所有函数上使用 CTYPES,但是我遇到了剩下的 2 个函数的问题,它们非常相似。
功能
LONG SetMe(LONG Dev, BYTE Length, STRUCTURE_SETTINGS StructureSettings, void* data, DWORD dataSize);
参数 开发 - 输入 长度 - 输入 结构设置 - 输入 数据 - 输出 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.
【问题讨论】:
-
我目前得到的回报是什么。 dataSize 是我要返回的数据量,值应该是整数或十六进制值。我会试试你的建议。
-
我目前得到的回报是什么。 dataSize 是我要返回的数据量,值应该是整数或十六进制值。我尝试了您的建议,但没有返回任何结果。我将 DLL 的 argtype 设置为 c_void_p,然后执行 byref(data) 然后 repr(data.raw) 并返回 '\x00\x00\x00\x00' 我正在运行的代码的结果应该返回 IP 地址我也在谈论的设备。还有其他想法吗?
-
见上面添加的更多代码信息
-
我解决了我的问题....我不得不删除 argtype 设置并直接传入变量。
-
@user3277599,您应该将修复作为答案发布,这样这个问题就不会显示为未回答。
标签: c# python-2.7 wrapper ctypes