Tôi đã thấy các trường hợp __declspec trong mã mà tôi đang đọc. Nó là gì? Và khi nào tôi cần sử dụng cấu trúc này?__declspec là gì và khi nào tôi cần sử dụng?
Trả lời
Đây là phần mở rộng cụ thể của Microsoft đối với ngôn ngữ C++, cho phép bạn gán một loại hoặc chức năng với thông tin lớp lưu trữ.
Documentation
Các ví dụ kinh điển là __declspec(dllimport)
và __declspec(dllexport)
, mà chỉ thị cho mối liên kết để nhập khẩu và xuất khẩu (tương ứng) một biểu tượng từ hoặc một DLL.
// header
__declspec(dllimport) void foo();
// code - this calls foo() somewhere in a DLL
foo();
(__declspec(..)
chỉ kết thúc tốt đẹp thứ cụ thể của Microsoft - để đạt được khả năng tương thích, người ta thường sẽ quấn nó đi với các macro)
làm thế nào để bạn biết dllimport dll dllim trỏ đến? – tetris
@tetris, bạn không biết từ mã. Quyết định được thực hiện bởi người liên kết, người sẽ chọn '.lib' đầu tiên mà nó tìm thấy có biểu tượng được xuất phù hợp. –
Về cơ bản, đó là cách Microsoft giới thiệu C mở rộng của nó ++ để họ sẽ không xung đột với các phần mở rộng trong tương lai của tiêu chuẩn C++. Với __declspec, bạn có thể gán một hàm hoặc một lớp; ý nghĩa chính xác khác nhau tùy thuộc vào bản chất của __declspec. __declspec (naked), ví dụ, ngăn chặn prolog/epilog thế hệ (cho trình xử lý ngắt, mã nhúng, vv), __declspec (thread) làm cho một biến thread địa phương, và như vậy.
Danh sách đầy đủ các thuộc tính __declspec có sẵn trên MSDN và thay đổi theo phiên bản và nền tảng trình biên dịch.
Xem xét các trình biên dịch không phải là microsoft như 'GCC 4.2', cung cấp thay thế ngoài' __attribute__ ((dllexport)) 'của' __declspec (dllexport) ', có công bằng khi gọi' __declspec', một phần mở rộng chỉ dành cho Microsoft không? – user2338150
Chủ yếu được sử dụng để nhập ký hiệu từ/xuất khẩu ký hiệu vào thư viện được chia sẻ (DLL). Cả hai trình biên dịch Visual C++ và GCC đều hỗ trợ __declspec(dllimport)
và __declspec(dllexport)
. Các mục đích sử dụng khác (một số chỉ dành cho Microsoft) được ghi thành tài liệu in the MSDN.
Một ví dụ khác để minh họa cho từ khóa __declspec:
Khi bạn đang viết một driver Windows Kernel, đôi khi bạn muốn viết prolog/code Epilog của riêng bạn trình tự sử dụng inline mã lắp ráp, vì vậy bạn có thể khai báo chức năng của bạn với thuộc tính naked.
__declspec(naked) int func(formal_parameters) {}
Hoặc
#define Naked __declspec(naked)
Naked int func(formal_parameters) {}
Vui lòng tham khảo naked (C++)
- 1. Điều gì và khi nào cần sử dụng Tuple?
- 2. Khi nào tôi cần sử dụng quaternions?
- 3. Khi nào tôi cần sử dụng @WebServiceRef?
- 4. Khi nào tôi cần sử dụng MPI_Barrier()?
- 5. Khi nào tôi sử dụng json.loads là gì?
- 6. Nhà phân bổ là gì và khi nào thì việc sử dụng chúng cần thiết?
- 7. Ý nghĩa của php: // input & php: // output là gì và khi nào cần sử dụng?
- 8. Request.InputStream là gì và khi nào nên sử dụng?
- 9. Là __declspec (dllexport) cần thiết trong các tệp cpp
- 10. Có điều gì tôi cần biết khi sử dụng Tkinter và pygame cùng nhau không?
- 11. Chỉ mục toàn văn là gì và khi nào tôi nên sử dụng nó?
- 12. INDEX SPATIAL là gì và khi nào tôi nên sử dụng?
- 13. Truy vấn SQL động là gì và khi nào tôi muốn sử dụng truy vấn SQL?
- 14. Mục đích của ROWLOCK trên Xóa là gì và khi nào tôi nên sử dụng?
- 15. Khi nào cần sử dụng Request.UrlReferrer và khi Request.ServerVariables ["HTTP_REFERER"]?
- 16. httpmodules httphandlers, sử dụng lý tưởng chúng là gì? khi nào nên sử dụng và khi nào không sử dụng?
- 17. Khi nào tôi cần sử dụng _.bindAll() trong Backbone.js?
- 18. Khi nào cần sử dụng viewDidLoad và khi nào thì sử dụng awakeFromNib
- 19. __declspec (dllimport) thực sự có nghĩa là gì?
- 20. AF_INET là gì và tại sao tôi cần nó?
- 21. Khi nào cần sử dụng socket.io và khi nào thì sử dụng ajax
- 22. Khi nào sử dụng undef_method, và khi nào cần sử dụng remove_method?
- 23. Khi nào cần sử dụng giao diện và khi nào cần sử dụng các chức năng bậc cao hơn?
- 24. Khi nào tôi sử dụng ByteString và khi nào tôi không sử dụng?
- 25. Mã "DECLDIR __declspec (dllexport)" thực sự là gì?
- 26. Khi nào tôi sử dụng dấu ngoặc đơn và khi nào tôi không sử dụng?
- 27. Khi nào cần sử dụng Eventstore
- 28. Khi nào tôi nên sử dụng require() và khi nào nên sử dụng define()?
- 29. Sự khác biệt giữa #import và @class là gì và khi nào tôi nên sử dụng cái kia?
- 30. Đóng cửa trong PHP ... những gì, chính xác, là họ và khi nào bạn sẽ cần phải sử dụng chúng?
Cảm ơn - nhưng những gì tôi sẽ sử dụng nó cho? –
Để khai báo các giao diện COM và các lớp, ví dụ, bạn sử dụng __declspec (uuid), đối với các hàm xuất khẩu, bạn sẽ tìm thấy tệp DEF bạn sử dụng __declspec (dllexport), vv Danh sách đầy đủ là khá dài. –
@ScottJ Tôi liên tục sử dụng nó cho các thuộc tính: __declspec (thuộc tính (get = X put = X)) định danh kiểu dữ liệu. MSDN có nhiều chi tiết hơn. Là một lập trình viên "C# đến C/C++", đó là một phúc lạc! – MasterMastic