2
的iCLASS(我的界面)输出类:使用接口从DLL
#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
Class.h
#ifndef _CLASS_H
#define _CLASS_H
#include "IClass.h"
#include <memory>
#include <sstream>
#include <stdio.h>
namespace Test
{
class Class: public IClass
{
public:
Class();
~Class();
bool Init(const std::string &path);
};
}
#endif
Class.cpp
#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;
}
}
}
主要(在EXE, dll隐式链接)
#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 symbol
:添加class __declspec(dllexport) Class : public IClass
解决此问题,连接器,但它是确定做这种方式?
- >我还不能做到这一点:std::shared_ptr<IClass> test = std::make_shared<IClass>();
(因为它不允许创建抽象类的对象)
我该如何解决这个问题,这是最好的做法?
可能重复[如何从一个DLL导出一个C++类?(http://stackoverflow.com/questions/6840576/how-to-export-ac-class-from-a -dll) –
如果您导出(和导入)类,并且包含相关头文件,程序将编译并工作。由于您没有说明您的目标或限制,因此无法说这是否是好的做法。 –
@DavidHeffernan:查看我的帖子编辑 – leon22