关于c ++:使用接口从dll导出类

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"));
}

在那一刻的课堂上,没有申报

如果我包括Class.h的话,主要跟踪错误的发生:LNK2019: unresolved external symbolAdd:class __declspec(dllexport) Class : public IClass解决这一链接问题,但可以这样做吗?

->I also can't do this:EDOCX1&3>(因为它不允许创建一个抽象类别的对象)

我怎么能解决这个问题,这是最好的实践?


如果您希望您的exe分配一个新的"class"对象,则exe代码必须知道类类型。如果您想让类类型从exe中保持未知,一个解决方案可能是从dll中导出一个工厂函数,该函数将构造一个类对象并将其作为IClass指针返回。

如何正确实现C++中的工厂模式