在构建dll时,我需要在客户端的标头中提供多少个父级作为__declspec(导出)

How many parents I need provide as __declspec(export) in headers for client when building dll?

本文关键字:多少 导出 declspec dll 构建 客户端      更新时间:2023-10-16

我为自己写了一个小引擎。我不知道如何从引擎中为客户端代码提供最少数量的头和信息。用户所需要的只是Processor模板类和两个公共方法,以及用户必须覆盖的IProcessor中的方法。问题如下。

#ifdef __ARENGINE_ON_WORK__
    #define DLL_SPEC __declspec(dllexport)
#else
    #define DLL_SPEC 
#endif
template<typename T, typename... masks>
class Processor : public ProcessorBase
{
public:
    DLL_SPEC static BitMask Mask()
    {
        static const BitMask mask = FormMask((masks::Mask())...);
        return mask;
    }
    DLL_SPEC BitMask GetMask() override
    {
        return Mask();
    }
private:
    template<typename... masks>
    static BitMask FormMask(const masks&... args)
    {
        BitMask resultMask = 0;
        std::vector<BitMask> vec = { args... };
        for (auto item : vec) resultMask |= item;
        return resultMask;
    }
};
class DLL_SPEC ProcessorBase : public EngineStorable, public IProcessor
{
public:
    ~ProcessorBase();
private:
    void NotifyProcessorDeleting();
};
  1. 需要将处理器类标记为DLL_PEC吗
  2. 需要将ProcessorBase标记为DLL_PEC吗
  3. 我需要为客户端代码提供ProcessorBase头文件吗?如果是,我需要提供多少个继承层次的父级

由于处理器代码是内联的,因此没有必要将Processor类标记为DLL_SPEC-所有代码都将在客户端模块中实例化。唯一将被导入的方法是~ProcessorBase(),所以只标记此方法。顺便说一句,如果DLL和客户端模块使用不同版本的C运行库,则导出析构函数可能不安全。在这种情况下,在实现中添加导出的方法void destroy()并调用delete this