如何使用包装类中定义的 __declspec(dllexport) 结构导出?

ale*_*555 0 c++ dllexport

是否可以导出包装类的结构而不包装它(结构仅包含枚举和基元)?假设我的包装如下所示:

WorkerWrapper.h

#ifdef TESTEXPORTDLL_EXPORTS
#define TESTEXPORTDLL_API __declspec(dllexport)
#else
#define TESTEXPORTDLL_API __declspec(dllimport)
#endif

class Worker;
struct JobTypeInfo;

template class TESTEXPORTDLL_API std::unique_ptr<Worker>;

class TESTEXPORTDLL_API WorkerWrapper {
private:
    std::unique_ptr<Worker> fWorker;

public:
  WorkerWrapper();
  ~WorkerWrapper();
  WorkerWrapper(WorkerWrapper&& aThat);
  WorkerWrapper& operator= (WorkerWrapper&& aThat);

  void DoJob(JobTypeInfo aTypeInfo);
};
Run Code Online (Sandbox Code Playgroud)

这是通过使用WorkerWrapper.cpp定期实现的处理,这不是我问题的原因。该类是前向声明的,并包含一个我想要导出的结构。unique_ptrstd::moveWorkerWorkerWrapper

工人.h

struct JobTypeInfo
{
    typedef enum
    {
        DoThis,
        DoThat,
        DoNothing
    } CalcType;
    CalcType sCalcType;

    //... primitives
};

class Worker
{
public:
    void DoJob(JobTypeInfo aTypeInfo);
};
Run Code Online (Sandbox Code Playgroud)

我在这里能做什么?

提前致谢。

Sim*_*ter 5

如果没有包含的方法,则导出 astruct不会执行任何操作 - 导出 aclass意味着导出其所有方法及其typeinfo(如果它包含vtable ) 。

你用这种方式导出WorkerWrapper也是有问题的,因为std::unique_ptr<Worker>没有导出。如果您没有任何内联方法(包括默认实现),它会起作用,但 MSVC 会给您警告C4251

尝试仅传递接口指针。虚拟析构函数是可以的,因为它们称为正确的解除分配器。