在 dll 中导出 c++ class 的问题
Issues with exporting a c++ class in a dll
我有一个具有基本功能的 class - 几个成员和几个 getters/setters 相同。
//xyzFile.h
class MACRO_DLL_EXPORT xyz
{
public:
bool getStatus() {return status;}
void setStatus(bool currstatus) {status = currstatus;}
.
.
.
private:
bool status;
.
.
.
};
因此,我只是在 .h 文件中声明和定义了这个 class,没有 .cpp 文件。当我导出此 class 并尝试在另一个 dll 中使用它时,我遇到了各种链接器错误。当我只是引入一个空的.cpp 文件时,所有这些错误都已修复。到目前为止,根据我的理解,这是因为没有 .cpp 文件,我们就没有 obj 文件,因此链接有问题。这样对吗?
是的,没错:
如果您的 DLL 项目中没有.cpp,则不会生成 DLL。因此,您与 dll 的所有链接都会。
但是,在您的 .h 中,您拥有所有必要的代码:如果没有链接器依赖项,代码是否可以编译。
为了为 classes 构建 DLL,在头文件中只放入 class 规范而不执行函数会更安全。将函数实现放在库的.cpp 中。
我有一个具有基本功能的 class - 几个成员和几个 getters/setters 相同。
//xyzFile.h
class MACRO_DLL_EXPORT xyz
{
public:
bool getStatus() {return status;}
void setStatus(bool currstatus) {status = currstatus;}
.
.
.
private:
bool status;
.
.
.
};
因此,我只是在 .h 文件中声明和定义了这个 class,没有 .cpp 文件。当我导出此 class 并尝试在另一个 dll 中使用它时,我遇到了各种链接器错误。当我只是引入一个空的.cpp 文件时,所有这些错误都已修复。到目前为止,根据我的理解,这是因为没有 .cpp 文件,我们就没有 obj 文件,因此链接有问题。这样对吗?
是的,没错:
如果您的 DLL 项目中没有.cpp,则不会生成 DLL。因此,您与 dll 的所有链接都会。
但是,在您的 .h 中,您拥有所有必要的代码:如果没有链接器依赖项,代码是否可以编译。
为了为 classes 构建 DLL,在头文件中只放入 class 规范而不执行函数会更安全。将函数实现放在库的.cpp 中。