C# 用CTYPES编写的C DLL的无效指针

C# 用CTYPES编写的C DLL的无效指针,c#,python-2.7,wrapper,ctypes,C#,Python 2.7,Wrapper,Ctypes,我正在尝试将C#程序转换为python。DLL是用C包装的,我已经能够在所有函数上使用CType,但是我在剩下的两个函数上有问题,它们非常相似 功能 LONG SetMe(LONG Dev, BYTE Length, STRUCTURE_SETTINGS StructureSettings, void* data, DWORD dataSize); 参数 开发人员-输入 长度输入 结构设置-输入 数据输出 数据大小-输入 我可以运行函数,DLL也会响应,但它不会返回任何值。我应该如何处理VOI

我正在尝试将C#程序转换为python。DLL是用C包装的,我已经能够在所有函数上使用CType,但是我在剩下的两个函数上有问题,它们非常相似

功能

LONG SetMe(LONG Dev, BYTE Length, STRUCTURE_SETTINGS StructureSettings, void* data, DWORD 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.

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

getFuncDLL.argtypes=[c_long,c_int,ctypes.POINTER(结构设置),c_void\u p,c_ulonglong]
getFuncDLL.restype=c_long

我当前得到的返回值为零。dataSize是我想要返回的数据量,值应该是整数或十六进制值。我会试试你的建议。我现在得到的回报是零。dataSize是我想要返回的数据量,值应该是整数或十六进制值。我尝试了你的建议,但没有得到任何回报。我将DLL的argtype设置为c_void_p,然后执行byref(data)然后repr(data.raw)并返回“\x00\x00\x00\x00”我正在运行的代码的结果也应该返回我正在谈论的设备的IP地址。还有其他想法吗?请参阅上面添加的更多代码信息我修复了我的问题。。。。我不得不删除argtype设置,直接传入变量。@user3277599,您应该将修复作为答案发布,这样这个问题就不会显示为未回答。