I have a dll with a function that takes PyObject as argument something like
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;
}
and I want to call this function in the dll from python using ctypes
My python code looks like
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) )
there is some problem in my Python code when I run this code I got message like
WindowsError: exception: access violation reading 0x00000020
Any suggestion to improve python code would be appriciated.
I made the following changes to your code and it worked for me, but I'm not sure it is 100% correct way to do it:
For example: