Создание и экспорт класса C ++ Singleton из DLL - PullRequest
1 голос
/ 06 июня 2011

У меня небольшой запрос, Как создать и экспортировать класс Singleton из DLL?это может быть разделено между несколькими модулями одного приложения.Мое намерение состоит в том, чтобы создать централизованную пользовательскую систему ведения журналов, которая бы регистрировала в одном и том же файле.

1 Ответ

3 голосов
/ 06 июня 2011

Ссылка, опубликованная ajitomatix для шаблонного синглтона, не шаблонное решение может выглядеть так:

class LOGGING_API RtvcLogger
{
public:
  /// Use this method to retrieve the logging singleton
  static RtvcLogger& getInstance()
  {
    static RtvcLogger instance;
    return instance;
  }

  /// Destructor
  ~RtvcLogger(void);

  /// Sets the Log level for all loggers
  void setLevel(LOG_LEVEL eLevel);
  /// Sets the minimum logging level of the logger identified by sLogID provided it has been registered.
  void setLevel(const std::string& sLogID, LOG_LEVEL eLevel);

  /// Log function: logs to all registered public loggers
  void log(LOG_LEVEL eLevel, const std::string& sComponent, const std::string& sMessage);

protected:
  RtvcLogger(void);
  // Prohibit copying
  RtvcLogger(const RtvcLogger& rLogger);
  RtvcLogger operator=(const RtvcLogger& rLogger);
  ....
};

Где LOGGING_API определяется как

// Windows
#if defined(WIN32)
// Link dynamic
  #if defined(RTVC_LOGGING_DYN)
    #if defined(LOGGING_EXPORTS)
      #define LOGGING_API __declspec(dllexport)
    #else
      #define LOGGING_API __declspec(dllimport) 
    #endif
  #endif
#endif

// For Linux compilation && Windows static linking
#if !defined(LOGGING_API)
  #define LOGGING_API
#endif

Похоже, что выВы уже знаете об этом, но для полноты картины синглтон Майера работает, пока ваш код находится в DLL на Windows, если вы связываете его как статическую библиотеку, он не будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...