我有一个带有PyObject作为参数的函数的dll
之类的东西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;
}
我希望使用ctypes
在python中调用dll中的这个函数我的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代码存在一些问题 当我运行这段代码时,我收到了像
这样的消息WindowsError:exception:访问冲突读取0x00000020
任何改进python代码的建议都会受到关注。
答案 0 :(得分:2)
我对您的代码进行了以下更改,它对我有用,但我不确定这是100%正确的方法:
例如:
prototype = c.PYFUNCTYPE(
c.c_char_p,
c.py_object
)
func = prototype(('MyFunction', libTest))
func( MyClass )