在 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 中。