两个DLL声明之间的区别

时间:2009-05-29 14:13:23

标签: c++ dll

我有一个简单而微妙的问题。下面是DLL头文件中同一类的两种不同声明变体。

有人可以告诉我这个类声明的区别;

class __declspec(dllexport) Car {
public:
    Car();
    void drive(void); 
    typedef enum { None, Indented } Formatting;
}

来自这个?

class Car {
public:
    __declspec(dllexport) Car();
    __declspec(dllexport) void drive(void); 
    __declspec(dllexport) typedef enum { None, Indented } Formatting;
}

在第一个声明中,类本身是 __ declspec(dllexport),而在后一种情况下,每个类元素都是单独声明的。

他们是不同的还是他们有共同点?

2 个答案:

答案 0 :(得分:4)

使用depends的简短测试表明,第一个示例导出一个额外的符号与第二个符号相比(顺便说一下,您不导出枚举,这是不合法的)。如果我没错,我相信它是默认的赋值运算符。

第一种方法导出整个类,第二种方法只是以declspec为前缀的方法(我猜这里并不奇怪)。

所以我要说导出类的正确方法显然是第一个,我个人没有看到任何使用第二种方法导出的类。

答案 1 :(得分:1)

导出类是导出其所有公共函数的简写。

所以区别在于__declspec枚举的Formatting是无意义的。

有时候只导出一组有限的类功能更合适;那么后一种形式是首选。请注意,在您的情况下,将不会导出“自动”生成的析构函数。