2010-11-16 53 views
4

给出以下命名空间,我在哪里把我的declspec(用于dll导出)我想要所有的方法在所述的命名空间导出到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

函数模板必须在头文件中声明(除非你打算只针对一组特定的参数对它进行实例化)。所以不需要出口。 – 2010-11-16 23:45:51

+0

@Oil AguiText命名空间怎么样? – jmasterx 2010-11-17 00:06:20

回答

5

无需导出一个命名空间。从编译代码的角度来看,命名空间是毫无意义的。你不能在代码中引用它们,它们只是定义范围。

在名称修改过程中,名称空间成为类/函数名称的一部分。一旦源文件被编译,它们就不是独立的实体。

如果要导出名称空间的内容,则需要导出这些实体,而不是命名空间本身。

+0

然后,我在哪里添加AGUI_DECLSPEC,以便将内部函数导出,如drawTextArea? – jmasterx 2010-11-17 00:12:08

+0

我该做什么 AGUI_DECLSPEC void someThing(); – jmasterx 2010-11-17 00:13:07

+0

函数和类是被导出的实际实体,所以你可以把'__declspec'放在那里。把命名空间想象成你放在你的函数上的小贴纸。贴纸本身并没有定义一个实体,他们只是装饰其他的东西。他们没有定义可用的对象。他们只是标记。 – 2010-11-17 00:22:04