[C++-sig] A callback function with arguments causes error

Bruce Who bruce.who.hk at gmail.com
Thu May 10 17:57:16 CEST 2007


Hi, all

I have some callback functions in my .cpp files and I want to wrap
them into python scripts with swig. So I have tried this example
first: swigwin-1.3.31/Examples/python/callback. This example compiles
and runs well. But this callback function takes no arguments, so I
changed it a little:

// example.h
class Callback {
public:
	virtual ~Callback() { std::cout << "Callback::~Callback()" << std:: endl; }
	// XXX this is the original statement
	// virtual void run() { std::cout << "Callback::run()" << std::endl; }
	virtual void run(int* pn) { std::cout << "Callback::run()" << (*pn)
<< std::endl; }
};


class Caller {
private:
	Callback *_callback;
public:
	Caller(): _callback(0) {}
	~Caller() { delCallback(); }
	void delCallback() { delete _callback; _callback = 0; }
	void setCallback(Callback *cb) { delCallback(); _callback = cb; }
	// XXX void call() { if (_callback) _callback->run(); }
	void call()
	{
		if (_callback)
        	{
        	    int i = 90;
        	    // XXX _callback->run(i);
        	    _callback->run(&i);
        	}
    	}
};


As you see, I just add a int* argument to this callback. It compiles
but it cause python.exe to crash while running. Could anybody tell me
how to solve this? Any help would be appreciated!


Bruce



More information about the Cplusplus-sig mailing list