用CTYPES编写的C DLL的VOID指针

时间:2014-02-06 01:18:23

标签: c# python-2.7 wrapper ctypes

我正在尝试将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.

1 个答案:

答案 0 :(得分:-1)

该问题的解决方案是删除以下行:

getFuncDLL.argtypes = [c_long,c_int,ctypes.POINTER(STRUCTURE_SETTINGS),c_void_p,c_ulonglong] getFuncDLL.restype = c_long