我需要一份关于declspec(dllexport)的使用说明。请以markdown格式提供答案，包括至少三个使用场景，每个场景都需要一段简短的代码示例，总字数不超过300字。
user
```markdown
### `__declspec(dllexport)` 使用说明

`__declspec(dllexport)` 是一个Microsoft特定的扩展，用于导出类或函数，使得它们可以在其他应用程序中通过链接到生成的 DLL 而被使用。以下是三个常见的使用场景及示例：

#### 场景1: 导出函数
当您希望从DLL中导出单个函数以便其他模块可以调用它时，可以使用 `__declspec(dllexport)`。例如：

```cpp
// 在DLL库源文件foo.cpp中
__declspec(dllexport) void hello() { 
    std::cout << "Hello from DLL!" << std::endl; 
}
```

#### 场景2: 导出类
如果您希望导出整个类以便其方法和成员变量能在其他模块中使用，也可以标注该类：

```cpp
// 在DLL库头文件foo.h中
#include <iostream>

class __declspec(dllexport) MyClass {
public:
    void printMessage() { 
        std::cout << "Message from MyClass" << std::endl; 
    }
};
```

#### 场景3: 条件编译控制导出
在开发DLL时，您可能希望使用同一个头文件在DLL内声明导出并且在DLL外引用其定义。此场景可通过条件编译来实现：

```cpp
// 在DLL库头文件foo.h中
#ifdef EXPORTING_MYDLL
#define DLLIMPORT __declspec(dllexport)
#else
#define DLLIMPORT __declspec(dllimport)
#endif

class DLLIMPORT AnotherClass {
public:
    AnotherClass();
    ~AnotherClass();
    void speak();
};
```

在以上代码中，`EXPORTING_MYDLL`宏通常只有在编译DLL自身时定义，从而导出该类。当从外部引用DLL时，未定义`EXPORTING_MYDLL`，则将使用 `__declspec(dllimport)` 进行引用。
```
assistant