2010-11-16 8 views
4

, учитывая следующее пространство имен, где я помещаю свой declspec (для экспорта dll) i Я хочу, чтобы все методы в указанном пространстве имен были экспортированы в DLL?Где я должен поставить свой DECLSPEC для пространства имен?

namespace AguiText { 
    void drawTextArea(AguiGraphicsManager *g, const AguiFont &font,const AguiRectangle &area, 
     const AguiColor &color, const std::vector<std::string> &lines, 
     AguiHorizontalAlignmentEnum horizontalAlignment, AguiVerticalAlignmentEnum verticalAlignment); 

    void divideText(std::vector<std::string> &words, 
     const std::string &text,const AguiFont &font, int maxWidth = -1); 
    void makeTextLines(const AguiFont &font,const std::vector<std::string> &words, 
     std::vector<std::string> &lineWords, int maxWidth); 
    void pointInTextArea(const AguiFont &font, 
     const AguiRectangle &area, const AguiPoint &point, 
     const std::vector<std::string> &lines, AguiRectangle &retRect, 
     int &retIndex, AguiHorizontalAlignmentEnum horizontalAlignment, AguiVerticalAlignmentEnum verticalAlignment); 

} 

Благодаря

+0

Шаблоны функций должны быть объявлены в файле заголовка (если только вы не планируете использовать его только для определенного набора параметров). Поэтому нет необходимости экспортировать. –

+0

@ О каком пространстве имен AguiText? – jmasterx

ответ

5

Там нет необходимости экспортировать пространство имен. С точки зрения скомпилированного кода пространства имен не имеют смысла. Вы не можете ссылаться на них в коде, они просто определяют область.

Пространства имен завершаются, становясь частью названий классов/функций во время процесса извлечения имени. Они не являются отдельными объектами после компиляции исходного файла.

Если вы хотите экспортировать содержимое пространства имен, вам необходимо экспортировать эти объекты, а не пространство имен.

+0

Затем, где добавить AGUI_DECLSPEC, чтобы функции внутри экспортировались, например drawTextArea? – jmasterx

+0

сделаю AGUI_DECLSPEC void someThing(); – jmasterx

+0

Функции и классы - это фактические сущности, экспортируемые, поэтому вы можете поместить свой '__declspec' вокруг них. Подумайте о пространствах имен как о маленьких наклейках, которые вы наделите своими функциями. Наклейки сами не определяют сущность, они просто украшают другие вещи. Они не определяют используемые объекты. Это просто разметка. – 2010-11-17 00:22:04

Смежные вопросы