boost::python: Klassenmethoden Aufrufen?



  • Hi leute, ich habe ein Problem:
    Ich möchte per python eine klassenmethode in c++ aufrufen:

    BOOST_PYTHON_MODULE(gHost) {
    	def("registerHandler", &CPython::RegisterHandler);
    }
    
    void CPython :: RegisterHandler(PyObject *HandlerName, PyObject *PyPointer) {
    	char *nHandlerName = PyString_AsString(HandlerName);
    
    	for( vector<CHandler *> :: iterator i = m_Handlers.begin();
    		 i != m_Handlers.end(); i++ ) {
    			 if( (*i)->GetName() == nHandlerName ) {
    				 (*i)->RegisterPyFunc(PyPointer);
    				 return;
    			 }
    	}
    
    	NewHandler(nHandlerName);
    	RegisterHandler(HandlerName, PyPointer);
    }
    

    Fehlermeldung beim starten der .exe:

    Traceback (most recent call last):
      File "C:\Users\Krauzi\Desktop\GHost++ Python\python\__init__.py", line 3, in <
    module>
        test.init()
      File "C:\Users\Krauzi\Desktop\GHost++ Python\python\test.py", line 8, in init
        gHost.registerHandler( "PlayerJoin", myFunc )
    Boost.Python.ArgumentError: Python argument types in
        gHost.registerHandler(str, function)
    did not match C++ signature:
        registerHandler(class CPython {lvalue}, struct _object *, struct _object *)
    

    Anscheinend gibts deshalb Probleme: class CPython {lvalue}. Vermutlich wird beim Aufrufen einer Methode "unsichtbar" der Klassenzeiger mit aufgerufen.

    Tja nur wie behebe ich jetzt dieses Problem?


Anmelden zum Antworten