Using interface to export class from dll
我的接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #ifndef _ICLASS_H #define _ICLASS_H #include <sstream> namespace Test { class __declspec(dllexport) IClass { public: virtual ~IClass() {} virtual bool Init(const std::string &path) = 0; }; } #endif |
班
ZZU1
类别
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include"Class.h" namespace Test { Class::Class() { } bool Class::Init(const std::string &path) { try { // do stuff return true; } catch(std::exception &exp) { return false; } } } |
主(in exe,dll inpliked)
1 2 3 4 5 6 7 8 9 10 | #include"IClass.h" using namespace Test; int main(int argc, char* argv[]) { std::shared_ptr<IClass> test = std::make_shared<Class>(); // error: unreferenced Class test->Init(std::string("C:\\Temp")); } |
在那一刻的课堂上,没有申报
如果我包括
->I also can't do this:EDOCX1&3>(因为它不允许创建一个抽象类别的对象)
我怎么能解决这个问题,这是最好的实践?
如果您希望您的exe分配一个新的"class"对象,则exe代码必须知道类类型。如果您想让类类型从exe中保持未知,一个解决方案可能是从dll中导出一个工厂函数,该函数将构造一个类对象并将其作为IClass指针返回。
如何正确实现C++中的工厂模式