【问题标题】:Receive a pass a object by reference using ctypes使用 ctypes 通过引用接收传递对象
【发布时间】:2021-12-10 11:55:05
【问题描述】:

我有一个 C 语言库,其中有一个对象 IedConnection,用于处理与远程设备的连接。

IedConnection con = IedConnection_create();
IedConnection_connect(con, &error, hostname, tcpPort);
IedConnection_destroy(con);

我了解如何传递和返回ctype 对象,如c_int,但我将如何使用ctypes 在python 中声明IedConnection con 对象?

【问题讨论】:

  • 1. C 中没有通过引用传递。 2. 您需要找出 IedConnection 的 实际 类型 - 标量类型的指针、结构、联合、typedef 别名,或者它是什么......然后这将是不言而喻的。您提供的摘录没有说明。
  • 是的,该库使用 SWIG,但有一个问题。我正在尝试使用 ctypes 制作包装器。 IedConnection 是一个结构。有没有办法只传递对象的地址而不是在 pyhton 中构建整个结构? @AnttiHaapala

标签: python c ctypes


【解决方案1】:

IedConnection 是指向结构 (typedef struct sIedConnection * IedConnection) 的指针。所有指向结构的指针都应该具有相同的表示,因此您可以只使用指向 any 结构的指针,而无需定义其内容,除非您想取消引用它或进行指针运算。因此这应该有效:

from ctypes import *

class SIedConnection(Structure):
    pass

IedConnection = POINTER(SIedConnection)

现在您可以像往常一样使用IedConnection 作为return typeargument types

【讨论】:

  • 非常感谢
猜你喜欢
  • 2019-04-07
  • 2023-03-30
  • 2019-08-04
  • 2017-09-11
  • 2011-03-18
  • 1970-01-01
  • 2011-07-06
  • 2012-07-07
相关资源
最近更新 更多