[C++-sig] Why this does not work- overriding C++ virtual functions in python script?

Bruce Who bruce.who.hk at gmail.com
Tue May 8 14:20:54 CEST 2007

Hi, all

I have managed to get a python wrapper for my Cpp modules, but there
is something wrong.

This is my cpp files:

// cmod.h file
#ifndef __CMOD_H
#define __CMOD_H

class EventHandler
    virtual void OnEvent(){}
    virtual ~EventHandler(){}

void func(void);

void setEventHandler(EventHandler* pEH);


// cmod.cpp file
#include "cmod.h"

static EventHandler* s_pEH;

void func(void)
    if(s_pEH != NULL)
        printf("call OnEvent");

void setEventHandler(EventHandler* pEH)
    s_pEH = pEH;

// cmod.i file
%module cmod
%include "cmod.h"

%inline %{
#include "cmod.h"


and I compile all these files with Visual Studio 2005:

swig -c++ -python cmod.i
cl -c cmod_wrap.cxx -ID:\program\Python25\include\
cl -c cmod.cpp
link /subsystem:windows /LIBPATH:D:\program\Python25\libs\
cmod_wrap.obj cmod.obj /dll /OUT:_cmod.pyd

and then we can get cmod.py and _cmod.pyd. I write a python script:

# testcmod.py file
import cmod

class EventHandler(cmod.EventHandler):
    def OnEvent(self):
        print 'called'

eh = EventHandler()

Once this script runs, it is supposed to print 'called' but it does
not! I guess that if we cannot override C++ virtual functions in
python script? Hope someone can help me. Any help would be


More information about the Cplusplus-sig mailing list