通过代理模式封装动态链接库:
需要导出的类
template class std::shared_ptr< ExpressSheetClass::Impl>;
class ExpressSheetClass::Impl
{
public:
Impl() {};
~Impl() {};
void init();
cv::Mat getUprightImg(cv::Mat& image);
private:
std::string config_path = "config_clas.txt";
Classifier* classifier = nullptr;
};
需要导出Impl类的void init(); cv::Mat getUprightImg(cv::Mat& image);
这两个方法,
下面对要导出的类再封装一层:
class _declspec(dllexport) ExpressSheetClass
{
public:
ExpressSheetClass() {}
void init();
cv::Mat getUprightImg(cv::Mat& image);
private:
class Impl;
std::shared_ptr<Impl>m_ptr_impl;
};
这是封装的头文件,调用此项目只需要这个头文件和生成的dll和lib文件就可以了。
需要导出的方法,用封装类ExpressSheetClass重新实现一下
void ExpressSheetClass::init() {
m_ptr_impl.reset(new Impl);
m_ptr_impl->init();
}
cv::Mat ExpressSheetClass::getUprightImg(cv::Mat& image) {
cv::Mat res = m_ptr_impl->getUprightImg(image);
return res;
}