用于Ctypes的Python中的Safearray
Safearray in Python for Ctypes
我试图在DLL中使用Python Ctypes提供的函数。我知道用C++编写代码会更有效,也更不错。然而,我的项目中的所有内容都是用Python编写的。因此,我需要一段时间才能将这些代码转换为C++。
我想从DLL中使用的函数类似于
int MLAPI_GetDeviceInfo(SAFEARRAY**, SAFEARRAY**)
正如您所知,ctypes没有一个名为SAFEARRAY的数据类型。所以我试图制作一个按类和字段的结构。(事实上,当我在谷歌上搜索时,有人试图制作SAFEARRAY,但它对我不起作用,也在这里寻找类似的案例)
from ctypes import *
class SAFEARRAYBOUND(Structure):
_fields_ = [("cElements" , c_ulong),
("lLbound" , c_long)]
class SAFEARRAY(Structure):
_fields_ = [("cDims", c_ushort),
("fFeatures", c_ushort),
("cbElements", c_ulong),
("cLocks", c_ulong),
("pvData", c_void_p),
("rgsabound", SAFEARRAYBOUND * 1)]
正如官方文件中的结构声明所说,我写了两个关于SAFEARRAY和SAFEARRAYBOUND的课程。
然后,我使用ctypes编写了用于函数使用的代码。
getdevicedata = Dll['MLAPI_GetDeviceInfo']
getdevicedata.restype = c_int
getdevicedata.argtypes = ()
getdevicedata()
我很不确定该为参数类型写什么。此外,我还不确定该把什么作为我所写的getdevicedata函数的参数。这些都是我的大部分代码。我尝试了很多组合的论点,但都失败了。所以我来Stackoverflow寻求你的答案。。。
我对Stackoverflow和Python很陌生,所以如果我在这个论坛或代码(或两者)中犯了错误,请告诉我。感谢阅读。祝你今天愉快。
假设您的结构是正确的(注意,由于数组大小可变,它们需要更多的工作),则.argtypes
为:
getdevicedata.argtypes = POINTER(POINTER(SAFEARRAY)),POINTER(POINTER(SAFEARRAY))
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- .cpp和.h文件中的模板专用化声明
- 反向给定链表中的K节点
- 正在查找文档以获得PS4平台的C++中的设备信息
- enum是C++中的宏变量还是整数变量
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 将字符串存储在c++中的稳定内存中
- 文本文件中的单词链表
- 递归函数计算序列中的平方和(并输出过程)
- 如何从C++中的依赖类型中获得它所依赖的类型
- C++中的"inline"关键字
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 用C++中的一个变量定义一个常量
- vector.resize()中的分配错误
- 使用指针从C++中的数组中获取最大值
- arr[-1]在c++中的奇怪行为
- 用于Ctypes的Python中的Safearray
- 从 COM TypeLib 自动生成的C++类不会在方法中返回 SAFEARRAY
- DCOM中的SAFEARRAY(BSTR) as [out]参数返回字符串失败