首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将多个ctype数据类型分配给Python中的单个ctype实例?

如何将多个ctype数据类型分配给Python中的单个ctype实例?
EN

Stack Overflow用户
提问于 2021-09-17 11:47:27
回答 1查看 62关注 0票数 0

我正在将C代码转换为使用.dll文件的Python代码。下面给出了从DLL访问命令的语法:

代码语言:javascript
复制
cnc_rdmacro(unsigned short FlibHndl, short number, short length, ODBM *macro);

指向odbm数据结构的C代码指针如下:

代码语言:javascript
复制
typedef struct  odbm {
    short   datano ;    /* custom macro variable number */
    short   dummy ;     /* (not used) */
    long    mcr_val ;   /* value of custom macro variable */
    short   dec_val ;   /* number of places of decimals */
} ODBM ;

用于访问dll命令的代码:

代码语言:javascript
复制
  short example( short number )
{
        ODBM macro ;
        char strbuf[12] ;
        short ret ;
        ret = cnc_rdmacro( h, number, 10, &macro ) ;

我根据上面的C代码转换的python代码如下:

代码语言:javascript
复制
import ctypes
fs = ctypes.cdll.LoadLibrary(r".dll filepath")
ODBM = (ctypes.c_short * 4)() #the datatype conversion code from the above C code
ret = fs.cnc_rdmacro(libh, macro_no, 10, ctypes.byref(ODBM))

我可以在上面的代码中没有任何错误的情况下得到输出。

ODBM的实际数据结构声明了4个数据类型变量(短、短、长和短),这些变量在C代码中实现。但我已经将python中的ODBM数据结构声明为ctypes.c_short * 4,即短数据类型的4个变量。

但我必须声明ODBM结构,与C代码中的结构相同,并将其传递给ctypes.byref()

最终的解决方案是将多个数据类型作为ctypes实例包含在单个变量中。请帮帮我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-17 12:32:30

这里应该使用ctypes.Structure

代码语言:javascript
复制
import ctypes

class ODBM(ctypes.Structure):
    _fields_ = [("datano", ctypes.c_short),
                ("dummy", ctypes.c_short),
                ("mcr_val", ctypes.c_long),
                ("dec_val", ctypes.c_short)]

fs = ctypes.cdll.LoadLibrary(r".dll filepath")
odbm = ODBM()
ret = fs.cnc_rdmacro(libh, macro_no, 10, ctypes.byref(odbm))

print(odbm.mcr_val)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69222927

复制
相关文章

相似问题

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