我有一个内置在dll中的C ++ API,现在我想通过python使用api,所以我决定用boost.python重新构建dll,但我是boost.python的新手。
API位于文件 CMyApi.h 中,它有一个像这样的工厂方法:
class __declspec(dllexport) CMyApi
{
public:
static CMyApi* CreateUserApi(const char *path = "");
virtual void Init() = 0;
protected:
~CMyApi(){};
};
CMyApi是一个虚拟类,CApiImpl继承自CMyApi,它在 CApiImpl.h 中定义:
class CApiImpl : public CMyApi
{
public:
CApiImpi();
~CApiImpi();
virtual void Init();
};
CApiImpl.cpp 包含CApiImpl的实现以及CMyApi :: CreateUserApi的实现:
static CMyApi* CMyApi::CreateUserApi(const char *path)
{
return new CApiImpl();
}
我不想将CApiImpl暴露给api用户,我希望CMyApi调用API,因此用户拥有CMyApi.h和DLL文件。
CMyApi包装如下:
class CMyApiWrapper : public CMyApi, public wrapper<CMApi>
{
void Init()
{
this->get_override("Init")();
}
};
BOOST_PYTHON_MODULE(CMyApiWrapper)
{
class_<CMyApiWrapper>("CMyApiWrapper")
.def("CreateUserApi", &CMyApi::CreateUserApi)
.staticmethod("CreateUserApi")
.def("Init", pure_virtual(&CMyApi::Init));
}
上面的BOOST_PYTHON_MODULE无法通过构建,我的程序出了什么问题?