gpt4 book ai didi

python - 访问 ctypes 返回对象的方法

转载 作者:行者123 更新时间:2023-11-28 21:57:36 25 4
gpt4 key购买 nike

我需要将 c++ dll 包装到 python。为此,我正在使用 ctypes 模块。

c++ 头文件是这样的:

class NativeObj
{
void func();
}

extern "C"
{
NativeObj* createNativeObj();

}; //extern "C"

我想在 python 代码中创建 NativeObj,然后调用它的 func 方法。

我编写了这段代码并获得了指向 NativeObj 的指针,但我没有找到如何访问 func

>>> import ctypes
>>> d = ctypes.cdll.LoadLibrary('dll/path')
>>> obj = d.createNativeObj()
>>> obj
36408838
>>> type(obj)
<type 'int'>

谢谢。

最佳答案

您不能从 ctypes 调用 C++ 实例方法。您将需要导出一个将调用该方法的非成员函数。在 C++ 中它看起来像这样:

void callFunc(NativeObj* obj)
{
obj->func();
}

然后你可以这样调用它:

import ctypes
d = ctypes.cdll.LoadLibrary('dll/path')
obj = d.createNativeObj()
d.callFunc(obj)

告诉 ctypes 所涉及的类型也很有用。

import ctypes
d = ctypes.cdll.LoadLibrary('dll/path')

createNativeObj = d.createNativeObj
createNativeObj.restype = ctypes.c_void_p
callFunc = d.callFunc
callFunc.argtypes = [ctypes.c_void_p]

obj = createNativeObj()
callFunc(obj)

关于python - 访问 ctypes 返回对象的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19636210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com