Có cách nào để người tiêu dùng liệt kê tất cả các giao diện được thực hiện bởi một đối tượng COM đã cho không?Làm thế nào tôi có thể phát hiện tất cả các giao diện một đối tượng COM thực hiện?
Trả lời
Bạn có thể thử IDispatch/IDispatchEx nếu bạn chỉ muốn biết những phương thức nào có thể gọi được từ người tiêu dùng của bạn.
Trong COM, phương thức QueryInterface trên IUnknown không được yêu cầu để hiển thị giao diện mà nó có thể trả về. Bạn yêu cầu một dựa trên IID của nó và bạn có nhận được nó hay không. Việc thực hiện QI trong một đối tượng COM cụ thể thay đổi đáng kể mặc dù nó phải tuân theo mô hình được mô tả bởi Microsoft ở đây - http://msdn.microsoft.com/en-us/library/ms682521%28VS.85%29.aspx.
Dependency Walker có thể làm công việc cho bạn ...
http://theircorp.byethost11.com/index.php?vw=TypeLib là một công cụ miễn phí để kiểm tra các tập tin TBL.
Phụ thuộc Walker có tính năng này không? –
Phụ thuộc Walker sẽ không hiển thị các giao diện khi xuất khẩu duy nhất là DllGetClassObject, DllRegisterServer, v.v ... (cho DLL được lưu trữ COM).
Bạn có thể, như weismat nói, kiểm tra các tệp TLB. Nhiều đối tượng COM chứa các typelib nhúng trong phần tài nguyên của tệp thực thi. Với một công cụ như hacker tài nguyên, bạn có thể trích xuất TLB và sử dụng các hàm LoadTypeLib COM để nhận con trỏ tới giao diện ITypeLib (bạn có thể sử dụng LoadTypeLib/LoadTypeLibEx trực tiếp với một COM hoặc EXE DLL, tất nhiên).
Với giao diện này, bạn có thể lặp qua các loại chứa bên trong.
Đánh giá nội dung của TLB sẽ không tiết lộ thông tin về bất kỳ giao diện riêng nào mà đối tượng COM có thể đang sử dụng. –
Giao diện COM riêng tư sẽ không xuất hiện, bạn nói đúng. –
- 1. danh sách các đối tượng java rằng tất cả thực hiện một giao diện
- 2. Thực hiện ngay tất cả các lớp đang triển khai một giao diện cụ thể
- 3. Bắt tất cả các lớp thực hiện một giao diện cụ thể trong WinRT
- 4. Làm thế nào để làm cho đối tượng chung trong java thực hiện một giao diện
- 5. Kiểm tra xem đối tượng có thực hiện giao diện
- 6. Liệt kê tất cả các lớp Delphi thực hiện một giao diện cụ thể?
- 7. Làm cách nào để có được tất cả các phiên bản của tất cả các loại được tải thực hiện một giao diện nhất định?
- 8. Có thể tạo một đối tượng giả lập thực hiện nhiều giao diện với EasyMock không?
- 9. Làm thế nào để giao diện truy vấn Powershell trên một đối tượng COM
- 10. Làm thế nào để tiêm phụ thuộc vào các lớp học thực hiện một giao diện?
- 11. Làm thế nào để kiểm tra xem một đối tượng có thực hiện một giao diện không?
- 12. Cách tìm tất cả các lớp thực hiện giao diện cụ thể?
- 13. Khuôn khổ thực thể - Làm thế nào tôi nên thể hiện đối tượng "Đối tượng" của tôi
- 14. Làm cách nào để biết một cá thể thực hiện một giao diện trong ActionScript 3.0
- 15. Tại sao một lớp trừu tượng thực hiện một giao diện có thể bỏ lỡ việc khai báo/thực hiện một trong các phương thức của giao diện?
- 16. Bạn có thể giả lập một đối tượng thực hiện một giao diện VÀ một lớp trừu tượng không?
- 17. Thực hiện các giao diện trong C++
- 18. Làm cách nào để phát triển giao diện COM?
- 19. Làm thế nào để có được loại đối tượng COM
- 20. Tôi có thể tìm tất cả các đối tượng COM có thể được tạo trong Powershell ở đâu?
- 21. Tại sao có thể tạo một thể hiện mới của giao diện COM?
- 22. Lập danh sách các đối tượng thực hiện một giao diện chung, với JaxB
- 23. lớp trừu tượng không thực hiện giao diện
- 24. Java - Thực hiện giao diện
- 25. Có thể buộc thực hiện rõ ràng giao diện (hoặc một phần của giao diện) không?
- 26. Có một mẫu được công nhận cho các đối tượng vô dụng thực hiện giao diện không?
- 27. Bắt tất cả các thay đổi được thực hiện cho một đối tượng trong Khung thực thể
- 28. Làm thế nào tôi có thể giả lập một lớp thực hiện giao diện Iterator bằng cách sử dụng PHPUnit?
- 29. Làm thế nào để tìm tất cả các trường hợp của các loại thực hiện một giao diện cụ thể trong khi gỡ lỗi
- 30. Tôi có thể tạo đối tượng cho giao diện không?
Nếu không nhớ xấu, với IDispatch/IDispatchEx bạn sẽ bắt được giao diện với thuộc tính oleautomation trong IDL. –