C++ 如何使用包装类中定义的uu declspec(dllexport)结构导出?

C++ 如何使用包装类中定义的uu declspec(dllexport)结构导出?,c++,dllexport,C++,Dllexport,是否可以在不包装的情况下导出包装类的结构(结构仅包含枚举和原语)?假设我的包装看起来像这样: workerrapper.h #ifdef TESTEXPORTDLL_EXPORTS #define TESTEXPORTDLL_API __declspec(dllexport) #else #define TESTEXPORTDLL_API __declspec(dllimport) #endif class Worker; struct JobTypeInfo; template class

是否可以在不包装的情况下导出包装类的结构(结构仅包含枚举和原语)?假设我的包装看起来像这样:

workerrapper.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);
};
struct JobTypeInfo
{
    typedef enum
    {
        DoThis,
        DoThat,
        DoNothing
    } CalcType;
    CalcType sCalcType;

    //... primitives
};

class Worker
{
public:
    void DoJob(JobTypeInfo aTypeInfo);
};
我能在这里做什么


提前感谢。

如果没有包含的方法,则导出
结构
没有任何作用——导出
意味着导出它的所有方法及其
类型信息(如果它包含vtable)

以这种方式导出
workerrapper
也是有问题的,因为
std::unique_ptr
不会导出。如果您没有任何内联方法(包括默认实现),它将起作用,但MSVC将为您提供


尝试只传递接口指针。虚拟析构函数是可以的,因为它们称之为适当的deallocator。

如果没有包含的方法,则导出
struct
什么也不做——导出
意味着导出它的所有方法及其
typeinfo
(如果它包含vtable)

以这种方式导出
workerrapper
也是有问题的,因为
std::unique_ptr
不会导出。如果您没有任何内联方法(包括默认实现),它将起作用,但MSVC将为您提供


尝试只传递接口指针。虚拟析构函数没有问题,因为它们称之为适当的deallocator。

我只需将结构提取到它自己的头文件中即可解决此问题。

我只需将结构提取到它自己的头文件中即可解决此问题