[C++-sig] Returning pointer to abstract class from pure virtual class method
Roman Hwang
hwang.roman at gmail.com
Mon Oct 12 08:59:58 CEST 2009
Hello.
I'm new to Python, but really want to use it with my C++ code.
I faced a problem while returning pointer to abstract class from pure
virtual class method.
I tried to search the web, but found nothing.
struct ICoreWrapper : ICore, wrapper<ICore>
{
virtual IRegistry* CreateRegistry()
{ return this->get_override("CreateRegistry")(); }
};
struct IRegistryWrapper : IRegistry, wrapper<IRegistry>
{
virtual void DoSomestuff()
{ return this->get_override("DoSomestuff")(); }
};
ICore* CreateCoreW()
{
return new CCore;
}
BOOST_PYTHON_MODULE_INIT(CorePy)
{
class_<IRegistryWrapper, boost::noncopyable>("IRegistry")
.def("DoSomestuff", pure_virtual(&IRegistry::DoSomestuff))
;
class_<ICoreWrapper, boost::noncopyable>("ICore")
.def("CreateRegistry", pure_virtual(&ICore::CreateRegistry),
return_value_policy<reference_existing_object>())
;
def("CreateCore", CreateCoreW,
return_value_policy<reference_existing_object>());
}
The Python code looks like this:
>>> import CorePy
>>> c = CorePy.CreateCore()
>>> b = c.CreateRegistry()
I get Debug Error
Run-Time Check Failure #0 - The value of ESP was not properly saved
across a function call.
This is usually a result of calling a function declared with one
calling convention with a function pointer declared
with a different calling convention.
Please tell me what I do wrong.
Or whether this code is supported or not.
Thanks
Roman Hwang.
More information about the Cplusplus-sig
mailing list