我对此采取的PyObject作为参数 像传递Python对象作为参数传递给C/C++使用功能的ctypes
void MyFunction(PyObject* obj)
{
PyObject *func, *res, *test;
//function getAddress of python object
func = PyObject_GetAttrString(obj, "getAddress");
res = PyObject_CallFunction(func, NULL);
cout << "Address: " << PyString_AsString(PyObject_Str(res)) << endl;
}
一个函数的DLL,我想通过调用从蟒蛇的dll这一功能ctypes的
我的Python代码看起来像
import ctypes as c
path = "h:\libTest"
libTest = c.cdll.LoadLibrary(path)
class MyClass:
@classmethod
def getAddress(cls):
return "Some Address"
prototype = c.CFUNCTYPE(
c.c_char_p,
c.py_object
)
func = prototype(('MyFunction', libTest))
pyobj = c.py_object(MyClass)
func(c.byref(pyobj))
有我的Python代码 一些问题,当我运行这款C颂我得到的消息像
WindowsError:异常:访问冲突阅读0x00000020
任何建议,以提高Python代码将appriciated。
我想'PyObject_GetAttrString(班 “的getAddress”)'真的'PyObject_GetAttrString(OBJ “的getAddress”)'?我还假设你检查每个函数结果,并且它们都不是null,直到'cout <<'? – 9000
是它是一个错字。谢谢。我会解决它。除此之外,C代码还是不错的。我在Python部分遇到问题。将指针指向从Python到Python函数的Python对象。怎么样 ? – Maverick
嗯,我不知道真实的,但我_think_'byref'在这里不需要。我想'func(pyobj)'应该可以工作。通过'byref',C代码得到一个指向指针的指针。 – 9000