【发布时间】:2021-08-11 08:57:02
【问题描述】:
我想将扩展的 Struct/Pointer(在下面的示例中 PY_LayerExtended)从 Python 发送到 C++,但出现错误。
我的 C++ 代码应该是这样的:
typedef struct PY_LayerBase {
} PY_LayerBase;
typedef struct PY_LayerExtended : PY_LayerBase {
} PY_LayerExtended;
typedef struct PY_Layer {
PY_LayerBase* layerBase;
} PY_Layer;
// My Method
void parseTest(PY_Layer *py_layer) {
// I cast PY_LayerBase to PY_LayerExtended
PY_LayerExtended* py_layerExt = static_cast<PY_LayerExtended*>(py_layer->layerBase);
}
我的 Python 代码如下所示:
import ctypes
from ctypes import *
class PY_LayerBase (ctypes.Structure):
_fields_ = []
class PY_LayerExtended (PY_LayerBase):
_fields_ = []
class PY_Layer(ctypes.Structure):
_fields_ = [("layerBase", PY_LayerBase)]
my_lib = cdll.LoadLibrary('mylib.dll')
py_layer_ext = PY_LayerExtended()
py_layer = PY_Layer(pointer(py_layer_ext))
parseTest = my_lib.parseTest
parseTest.argtypes = (POINTER(PY_Layer))
# Run C++
my_ptr = parseTest(pointer(py_layer))
当我运行 Python 时出现错误:
TypeError:不兼容的类型,PY_LayerExtended 实例而不是 PY_LayerBase 实例
错误发生在一行:py_layer = PY_Layer(pointer(py_layer_ext))
【问题讨论】: