From: William S F. <ws...@fu...> - 2012-02-06 07:33:20
|
On 27/01/12 22:34, Bonifacio Costiniano wrote: > Hello, > > I believe I'm running into a similar problem from this post, but I'm not > sure how to reply to this message archive as I don't have the original > email: > http://sourceforge.net/mailarchive/message.php?msg_id=28193033 > > I can reproduce this crash with the following example. > > * Reproduced on swig 1.3.40 and 2.0.4 > > ==[Test.h]================================================ > class Director1 > { > public: > Director1() { base_var = 1; } > virtual ~Director1() {} > > virtual void unused() {}; > protected: > int base_var; > }; > > class Director2 : public Director1 > { > public: > Director2() { base_var = 3; } > virtual ~Director2() {} > }; > > ==[test.i]================================================= > %module(directors="1", allprotected="1") Test > > %{ > #include "..\swigbuild\Test.h" > %} > > %feature("director") Director1; > %feature("director") Director2; > > %include "Test.h" > > ==[Program.cs]============================================= > class C : Director2 > { > public C() { } > public void test() > { > int a = base_var; // exception triggered here > Console.WriteLine(a); > } > } > > class Program > { > static void Main(string[] args) > { > C c = new C(); > c.test(); > } > } > > ==[test_wrap.h (snippets)]===================================== > class SwigDirector_Director1 : public Director1, public Swig::Director { > > public: > SwigDirector_Director1(); > virtual ~SwigDirector_Director1(); > ... > class SwigDirector_Director2 : public Director2, public Swig::Director { > > public: > SwigDirector_Director2(); > > ==[test_wrap.cxx (snippet)]=================================== > SWIGEXPORT int SWIGSTDCALL CSharp_Director1_base_var_get(void * jarg1) { > int jresult ; > Director1 *arg1 = (Director1 *) 0 ; > SwigDirector_Director1 *darg = 0; > int result; > arg1 = (Director1 *)jarg1; > darg = dynamic_cast<SwigDirector_Director1 *>(arg1); // This cast fails > result = (int) (darg->base_var); > jresult = result; > return jresult; > } > > jarg1 is of type SwigDirector_Director2, so the above dynamic cast will > fail. > > Is there another option I need to specify? I think this is a known bug and I can't think of any workaround atm. Sorry :( William |