[python-win32] Python interpreter crashes after trying to callback a python function with PyObject_CallObject from a dll

Oleg Novychny oleg_python at yahoo.de
Wed Aug 10 12:55:40 CEST 2005


Hello guys, I’m still implementing my callback to python from my dll and the python interpreter crashes


I have no idea atm why


 

I use the calldll module for calling my c++-dll from my module calldllsound.py:

 

import calldll

import struct

class CallSoundDLL:

def __init__(self, library):

                        self.library = library

                        


 

            def myGetResults(a):

                        print a  #just for debugging

calldll.call_foreign_function (self.addrGet,'llllll','i',(self.ulHz.address(), self.dNoise.address(), self.bAudio.address(),self.bCrackFlag.address(), self.dSNR.address(), self.bBeep.address()))

                                    

            def mySetCallback(self):

                        calldll.call_foreign_function (self.addrCall,'O','',(self.myGetResults,))

 

            def start(self):

                        # ---------------------------------------------------------------------------------------------

                        # Get the handle of the dll and the address of the function

                        # ---------------------------------------------------------------------------------------------

                        #Get the handle of the Dll

                        handle = calldll.load_library (self.library)

                        

                        #Get the address of the functions

                        self.addrStart = calldll.get_proc_address (handle, 'StartProcessing')

                        self.addrEnd = calldll.get_proc_address (handle, 'EndProcessing')

                        self.addrGet = calldll.get_proc_address (handle, 'GetResults')

                        self.addrCall = calldll.get_proc_address (handle, 'my_set_callback')

                        

                        # ---------------------------------------------------------------------------------------------

                        # Initialization

                        # ---------------------------------------------------------------------------------------------

                        self.ulHz = calldll.membuf(4)    #unsigned long*

                        self.dNoise = calldll.membuf(8)  #double*

                        self.bAudio = calldll.membuf(4)  #int*        

                        self.bCrackFlag = calldll.membuf(4) #int*    

                        self.dSNR = calldll.membuf(8)    #double*       

                        self.bBeep = calldll.membuf(4)  #int* 

                                      

                        # ---------------------------------------------------------------------------------------------

                        # Function calling

                        # ---------------------------------------------------------------------------------------------

                        args = (1,1,1,1,1,1000)

                        calldll.call_foreign_function (self.addrStart,'iiiiik','i',args)

 

So I’m starting my dll on  such a way:

>>> import calldllsound

>>> obj = calldllsound.CallSoundDLL("soundproclib.dll")

>>> obj.start()

It works without any problems.

 

But after the following command crashes the python interpreter...:

 

>>> obj.mySetCallback()

 

Here is my_set_callback function from my dll, which have to be called in the python function mySetCallback:

 

static PyObject *my_callback = NULL;

PyMODINIT_FUNC my_set_callback(PyObject *args)

{

          PyObject *temp = args;

          Py_XINCREF(temp);         /* Add a reference to new callback */

         Py_XDECREF(my_callback);  /* Dispose of previous callback */

         my_callback = temp;       /* Remember new callback */

         Py_INCREF(Py_None);

    

bPyCallBackFlag = true;

};

 

and here is the part of my code from the same c++-file where I’m trying to call my python-function myGetResults:

 




if (bPyCallBackFlag)

{

      /* Time to call the callback */

      ppyobjArgList = Py_BuildValue("(i)",123); //just for debugging

// Here crashes the python interpreter, I found it out with 

// error logging:

ppyobjResult = PyObject_CallObject(my_callback, ppyobjArgList);

      Py_DECREF(ppyobjResult);

}




 

Have  anybody any idea why it doesn’t work?

Thank you very much
Oleg

		
---------------------------------
Gesendet von Yahoo! Mail - Jetzt mit 1GB kostenlosem Speicher
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/python-win32/attachments/20050810/44a65077/attachment-0001.htm


More information about the Python-win32 mailing list