Vì vậy, thông thường (ít nhất là VS 2005 bang) cách để xác định xuất khẩu/nhập khẩu cho một DLL là:file header Tương tự cho cả hai DLL và Thư viện tĩnh
#ifdef MY_EXPORTS
#define MY_API __declspec(dllexport)
#else
#define MY_API __declspec(dllimport)
#endif
class MY_API MyClass {
...
};
này hoạt động tuyệt vời nếu tôi chỉ xây dựng của tôi mã như một DLL. Tuy nhiên, tôi muốn có tùy chọn sử dụng một thư viện tĩnh HOẶC một DLL. Bây giờ một giải pháp rõ ràng (nhưng khủng khiếp), là sao chép tất cả các mã, loại bỏ các DLL 'MY_API' định nghĩa. Bây giờ những gì có vẻ là một cách tiếp cận tốt hơn nhiều là một chuyển đổi dòng lệnh để xác định, hoặc không xác định các công cụ DLL. Tuy nhiên trong trường hợp của một thư viện tĩnh những gì nên 'MY_API' được?
#ifdef DLL_CONFIG
#ifdef MY_EXPORTS
#define MY_API __declspec(dllexport)
#else
#define MY_API __declspec(dllimport)
#endif
#else
#define MY_API // What goes here?
#endif
class MY_API MyClass {
...
};
Bây giờ giả định rằng điều này có thể được thực hiện sẽ có vấn đề khi người dùng của thư viện bao gồm các tập tin tiêu đề (ví dụ. Họ sẽ phải xác định 'DLL_CONFIG')?