From: Clinton C. <cl...@cl...> - 2006-02-12 03:19:32
|
>I am running into a problem where an object whose class is wrapped by SWIG, > is referenced in C#, and then gets garbage collected because it is > apparently no longer used. In reality, it is used by some C code, to which > is passed the aforementioned C# reference. > > I am trying to apply section 17.4.2 of the SWIG Manual, which explains that > I should create another reference to the object, to be stored as a member > variable of the C# proxy class. [...] > Unfortunately, it doesn't seem like %typemaps can be applied to code that is > generated from an %extend, probably because the %extend code is generated > after all %typemaps have been applied. Doh! I can't believe I missed section 10.2.2: --->8-- One exception to the typemap scoping rules pertains to the %extend declaration. %extend is used to attach new declarations to a class or structure definition. Because of this, all of the declarations in an %extend block are subject to the typemap rules that are in effect at the point where the class itself is defined. For example: class Foo { ... }; %typemap(in) int { ... } %extend Foo { int blah(int x); // typemap has no effect. Declaration is attached to Foo which // appears before the %typemap declaration. }; ---8<-- All I had to do was make sure that my %typemap occurs before my definition of the structure. --- Grace makes beauty out of old dead things. [U2] |