【问题标题】:VOID Pointer for C DLL written in CTYPES用 CTYPES 编写的 C DLL 的 VOID 指针
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2012-11-30
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 2010-10-16
    相关资源
    最近更新 更多