首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于C类型的Python中的Safearray

用于C类型的Python中的Safearray
EN

Stack Overflow用户
提问于 2019-09-14 16:26:20
回答 1查看 408关注 0票数 1

我正在尝试使用DLL中的一个函数,该函数是通过Python C类型提供的。我知道用C++编写代码会更有效率,也更好。但是,我的项目中的所有内容都是用Python编写的。所以我需要一段时间才能将这段代码转换成C++。

我想从DLL中使用的函数如下所示

代码语言:javascript
复制
int MLAPI_GetDeviceInfo(SAFEARRAY**, SAFEARRAY**) 

正如您所知道的,ctype没有名为SAFEARRAY的数据类型。所以我试着按类和字段来创建一个结构。(其实有人在我谷歌的时候想做SAFEARRAY,但是对我不起作用,也在找类似的案例here )

代码语言:javascript
复制
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)]

正如官方文档中的结构声明所说,我编写了两个关于SAFEARRAYSAFEARRAYBOUND的类。

然后,我使用ctype编写了代码以供函数使用。

代码语言:javascript
复制
getdevicedata = Dll['MLAPI_GetDeviceInfo']
getdevicedata.restype = c_int
getdevicedata.argtypes = ()
getdevicedata()

我不确定要为argtype写些什么。另外,我也不确定我写的getdevicedata函数的参数是什么。这些是我的大部分代码。我尝试了一堆参数的组合,但都失败了。所以我来Stackoverflow找你的答案...

我对Stackoverflow和Python非常陌生,所以如果我在这个论坛或代码(或两者)中犯了错误,请让我知道。感谢您的阅读。祝您今天愉快。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-17 01:05:26

假设您的结构是正确的(请注意,由于数组的大小可变,它们需要做更多的工作),.argtypes为:

代码语言:javascript
复制
getdevicedata.argtypes = POINTER(POINTER(SAFEARRAY)),POINTER(POINTER(SAFEARRAY))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57933772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档