2009-02-17 37 views
7

Có lẽ là một câu hỏi đơn giản nhưng tôi chỉ có Linux để kiểm tra mã này ở nơi __declspec (dllexport) là không cần thiết. Trong mã hiện tại __declspec (dllexport) nằm trước tất cả các tệp trong tệp .h nhưng chỉ ở trước 50% các hàm trong tệp cpp nên tôi tự hỏi liệu chúng có thực sự cần thiết trong tệp cpp không?Là __declspec (dllexport) cần thiết trong các tệp cpp

Trả lời

11

Không, chỉ cần thiết trong tiêu đề.

Dưới đây là link để biết thêm thông tin.

Mở rộng trên những gì Vinay đã nói, tôi đã thường thấy một macro được định nghĩa

#if defined(MODULENAME_IMPORT) 
#define EXPORTED __declspec(dllimport) 
#elif defined(MODULENAME_EXPORT) 
#define EXPORTED __declspec(dllexport) 
#endif 

Sau đó, trong phần đầu của bạn, bạn làm

thiết lập các định nghĩa phù hợp trong các thiết lập dự án cho dự án làm việc nhập/xuất.

5

Không, nó không được yêu cầu trong tệp cpp. Chỉ trong tuyên bố nó là bắt buộc.

Ví dụ: nếu tôi có lớp CMyClass. Nếu tôi muốn xuất này sau đó .h sẽ có

đang .h máy chủ

__declspec (dllexport) CMyClass { };

Trong mã khách hàng ví dụ, trong đó sử dụng lớp này bạn phải chuyển tiếp khai báo lớp như

Khách hàng mã

__declspec (dllimport) CMyClass;

// Mã để sử dụng lớp

2

Bạn có thể sử dụng trong tập tin cpp cũng có khi bạn đã templated mã và bạn đang instantiating trong tập tin cpp thì bạn cần phải xuất khẩu định nghĩa khi nó được khởi tạo. Nhưng ngay cả trong trường hợp này, tôi đã thấy rằng làm trong .h cũng hoạt động. Trên các cửa sổ, bạn có thể sử dụng dumpbin.exe/exports * .dll để xem những chữ ký nào được xuất, cũng có tiện ích tương tự trong Linux. Điều này sẽ cung cấp cho bạn một ý tưởng như thế nào chữ ký được xuất khẩu.

Các vấn đề liên quan