Thank you for the fast reply. I would have tried Py++ myself, but I'm unable to install it. I get an error that the .NET framework SDK must be installed in order to build Python extensions when I try to install GCC_XML. I tried to download and install the .NET SDK, but I'm sure if I've really got all of it. I didn't select much for the installation process. Though it is off-topic, any help with this would be nice too. I use Visual Studios C++ express on Windows XP. I have Python 
2.4 and the Windows Platform SDK.<br><br>As for the code, I haven&#39;t looked at it in a lot of detail yet, but a simple copy-and-paste gives me a run-time error that I&#39;m calling a pure-virtual function when I call Draw() from the passed in Renderable*. Any more thoughts?
<br><br><div><span class="gmail_quote">On 5/5/07, <b class="gmail_sendername">Roman Yakovenko</b> &lt;<a href="mailto:roman.yakovenko@gmail.com">roman.yakovenko@gmail.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
On 5/5/07, Tom Brooks &lt;<a href="mailto:tgbrooks@gmail.com">tgbrooks@gmail.com</a>&gt; wrote:<br>&gt; I currently have these C++ classes:<br>&gt;<br>&gt; class Renderable<br>&gt; {<br>&gt; public:<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; Renderable();
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; virtual ~Renderable();<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; virtual void Draw() = 0;<br>&gt; };<br>&gt;<br>&gt; class Quad : public Renderable<br>&gt; {<br>&gt; public:<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Quad(float x, float y, float h, float w);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; ~Quad();
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; void Draw();<br>&gt; };<br>&gt;<br>&gt; And I need to expose them to Python. Then, I need to be able to make one in<br>&gt; Python, and pass it back to a C++ function&nbsp;&nbsp;as a Renderable*.<br>&gt;<br>&gt; I made this wrapper class for Renderable:
<br>&gt;<br>&gt; struct RenderableWrap : Renderable, wrapper&lt;Renderable&gt;<br>&gt; {<br>&gt; public:<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; void Draw()<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this-&gt;get_override(&quot;Draw&quot;)();<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&gt; };
<br>&gt;<br>&gt; And I have this Boost.Python code for the Python side:<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; class_&lt;RenderableWrap,<br>&gt; boost::noncopyable&gt;(&quot;Renderable&quot;)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .def(&quot;Draw&quot;,pure_virtual(&amp;Renderable::Draw))
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; ;<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; class_&lt;Quad, bases&lt;RenderableWrap&gt; &gt;(&quot;Quad&quot;,init&lt;float, float, float,<br><br>Quad derives from Renderable, not RenderableWrap<br><br>&gt; float&gt;())<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .def(&quot;Draw&quot;,&amp;Quad::Draw)
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; ;<br>&gt;<br>&gt; But when I pass in a Quad() to my C++ function, I get an error that it can&#39;t<br>&gt; convert from a Quad to a Renderable*. I have next to no clue how the base<br>&gt; class should have been done, since the tutorial and anything else I can find
<br>&gt; online don&#39;t go over what to do for the base class (when there are virtual<br>&gt; functions, at least). For example, I don&#39;t know if I inherit from<br>&gt; Renderable, or RenderableWrap (or both?). I don&#39;t know whether the base
<br>&gt; class needs a wrapper itself (and would it if it had a virtual function?).<br>&gt;<br>&gt; I&#39;d appreciate any help!<br><br>Next code was generated by Py++ GUI<br>(<a href="http://language-binding.net/pyplusplus/documentation/tutorials/pyplusplus_gui.html">
http://language-binding.net/pyplusplus/documentation/tutorials/pyplusplus_gui.html</a>)<br><br>#include &quot;boost/python.hpp&quot;<br><br>#include &quot;1.h&quot;<br><br>namespace bp = boost::python;<br><br>struct Renderable_wrapper : Renderable, bp::wrapper&lt; Renderable &gt; {
<br><br>&nbsp;&nbsp;&nbsp;&nbsp;Renderable_wrapper( )<br>&nbsp;&nbsp;&nbsp;&nbsp;: Renderable( )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, bp::wrapper&lt; Renderable &gt;(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// null constructor<br><br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;virtual void Draw(&nbsp;&nbsp;){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bp::override func_Draw = this-&gt;get_override( &quot;Draw&quot; );
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;func_Draw(&nbsp;&nbsp;);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>};<br><br>struct Quad_wrapper : Quad, bp::wrapper&lt; Quad &gt; {<br><br>&nbsp;&nbsp;&nbsp;&nbsp;Quad_wrapper(Quad const &amp; arg )<br>&nbsp;&nbsp;&nbsp;&nbsp;: Quad( arg )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, bp::wrapper&lt; Quad &gt;(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// copy constructor
<br><br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;Quad_wrapper(float x, float y, float h, float w )<br>&nbsp;&nbsp;&nbsp;&nbsp;: Quad( x, y, h, w )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, bp::wrapper&lt; Quad &gt;(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// constructor<br><br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;virtual void Draw(&nbsp;&nbsp;) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( bp::override func_Draw = this-&gt;get_override( &quot;Draw&quot; ) )
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;func_Draw(&nbsp;&nbsp;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;Quad::Draw(&nbsp;&nbsp;);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;void default_Draw(&nbsp;&nbsp;) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Quad::Draw( );<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>};<br><br>BOOST_PYTHON_MODULE(pyplusplus){<br>
&nbsp;&nbsp;&nbsp;&nbsp;bp::class_&lt; Renderable_wrapper, boost::noncopyable &gt;( &quot;Renderable&quot; )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.def( bp::init&lt; &gt;() )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.def(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Draw&quot;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, bp::pure_virtual( &amp;::Renderable::Draw ) );
<br><br>&nbsp;&nbsp;&nbsp;&nbsp;bp::class_&lt; Quad_wrapper, bp::bases&lt; Renderable &gt; &gt;( &quot;Quad&quot;,<br>bp::init&lt; float, float, float, float &gt;(( bp::arg(&quot;x&quot;), bp::arg(&quot;y&quot;),<br>bp::arg(&quot;h&quot;), bp::arg(&quot;w&quot;) )) )
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.def(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Draw&quot;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, &amp;::Quad::Draw<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, &amp;Quad_wrapper::default_Draw );<br>}<br><br><br>--<br>Roman Yakovenko<br>C++ Python language binding<br><a href="http://www.language-binding.net/">
http://www.language-binding.net/</a><br>_______________________________________________<br>C++-sig mailing list<br><a href="mailto:C++-sig@python.org">C++-sig@python.org</a><br><a href="http://mail.python.org/mailman/listinfo/c++-sig">
http://mail.python.org/mailman/listinfo/c++-sig</a><br></blockquote></div><br>