Nên là một câu hỏi đơn giản, nhưng tìm kiếm tài liệu hướng dẫn tôi đang lái xe. Giả sử tôi có một con trỏ ITypeInfo cho một con coclass hoặc một giao diện. Làm thế nào để tôi có được tên của lớp đó hoặc giao diện?Làm cách nào để sử dụng con trỏ ITypeInfo để lấy tên của loại?
Trả lời
Ok. Nó đã trở nên khá đơn giản. Bạn chỉ cần gọi phương thức ITypeInfo.GetDocumentation
với id thành viên được đặt thành MEMBERID_NIL
(−1). Cũng giống như vậy:
CComBSTR typeName;
hr = typeInfo->GetDocumentation(MEMBERID_NIL, &typeName, NULL, NULL, NULL);
Nếu bạn đang lập trình trong .NET, bên trên được thực hiện thuận tiện cho bạn bởi Marshal.GetTypeInfoName
phương pháp:
// using System.Runtime.InteropServices;
string typeName = Marshal.GetTypeInfoName(typeInfo);
Câu trả lời ngắn gọn: bạn không thể sử dụng ITypeInfo
. Bạn có thể lấy ID prog của lớp bằng cách sử dụng API Win32 ProgIDFromCLSID
. Trong COM tên của C++ cơ bản, Visual Basic hoặc lớp .NET thực hiện giao diện COM hoặc đồng đẳng thực tế là vô nghĩa. Chỉ các ID giao diện, ID lớp và ID có lập trình có bất kỳ ý nghĩa nào ngoài mã nguồn của triển khai cùng lớp của bạn: chỉ những ID này có thể được sử dụng để kích hoạt đối tượng COM sử dụng CoCreateInstance
et al và thời gian chạy sử dụng QueryInterface
.
Vâng, giả sử tôi có một lý do chính đáng cho việc này (nhưng có lẽ Tôi không). Dù sao, bạn có chắc chắn rằng nó không thể? Có vẻ như các tiện ích thư viện kiểu Microsoft khác nhau có thể liệt kê thông tin này. Họ làm nó như thế nào? –
Vâng, khá thường xuyên ID prog được chọn để nó giống hoặc tương tự với tên lớp C++ - nhưng đây chỉ là một quy ước. Hầu hết các tiện ích thư viện kiểu hoặc liệt kê thông tin trong sổ đăng ký Windows hoặc trong các tệp .tlb tất cả đều xử lý riêng với ID lớp, ID giao diện và ID prog. Cuối cùng, nó hoàn toàn nằm dưới sự thực thi của 'DllGetClassObject' trong máy chủ COM DLL của bạn để kết hợp các giá trị COM này với lớp C++ của bạn. –
- 1. lấy loại con trỏ chuột hiện tại
- 2. Cách lấy tên hàm của con trỏ chức năng C
- 3. Làm thế nào để loại bỏ các con trỏ void
- 4. làm cách nào để sử dụng thuật toán STL với vectơ của con trỏ
- 5. Làm cách nào để tìm nạp nhiều cột để sử dụng trong vòng lặp con trỏ?
- 6. Cách lấy tên hàm từ con trỏ hàm trong C#?
- 7. Làm thế nào để tăng một địa chỉ con trỏ và giá trị của con trỏ?
- 8. Làm cách nào để sử dụng con trỏ 'gốc' trong lớp tham chiếu trong C++/CLI?
- 9. Làm cách nào để tìm tên tệp, được cung cấp con trỏ FILE?
- 10. Con trỏ Android với ORMLite để sử dụng trong CursorAdapter
- 11. Làm cách nào để buộc con trỏ đến cuối NSTextField?
- 12. Làm thế nào để có được loại của ứng dụng sử dụng tên gói
- 13. Làm cách nào để lấy tên của hằng số?
- 14. Làm cách nào để lấy tên hàm?
- 15. Lấy chiều dài của một mảng bằng cách sử dụng con trỏ
- 16. C++ Sử dụng con trỏ để mẫu vật
- 17. C#: Sử dụng chung để tạo mảng con trỏ
- 18. Làm cách nào để lấy tên của Chủ đề Win32?
- 19. Làm thế nào để bạn lấy tên tệp của tempfile để sử dụng trong Linux?
- 20. Làm cách nào để mô phỏng con trỏ trong Haskell?
- 21. Làm thế nào để có được tên nhóm làm nổi bật dưới con trỏ trong vim?
- 22. Làm cách nào để sắp xếp một con trỏ tới một con trỏ tới một int?
- 23. Sqlite làm thế nào để có được các mục chuỗi sử dụng con trỏ
- 24. Làm cách nào để đọc cấu trúc con trỏ C++?
- 25. Làm thế nào để bạn sử dụng con trỏ chuột tùy chỉnh trong ứng dụng .NET?
- 26. Làm cách nào để có danh sách tên cột từ con trỏ psycopg2?
- 27. Làm thế nào để loại bỏ chuỗi con khỏi chuỗi bằng cách sử dụng PHP?
- 28. sử dụng con trỏ kép thay vì con trỏ đơn
- 29. Làm cách nào để dán vào dòng con trỏ?
- 30. Làm cách nào để tạo một mảng con trỏ?
Bạn có chắc chắn rằng điều này không chỉ trả lại nội dung của thuộc tính [helpstring] được liên kết với một đồng đẳng? Tôi rất vui khi được chứng minh là sai! –
Hơn nữa, việc triển khai cơ bản của một đồng đẳng COM có thể thậm chí không là bất kỳ loại lớp nào cả (xem http://www.codeproject.com/KB/COM/com_in_c1.aspx để biết ví dụ về cách viết COM đối tượng trong đồng bằng C). Khái niệm "lớp" hoàn toàn phụ thuộc vào ngôn ngữ và tôi nghi ngờ rằng bạn có thể dựa vào phương thức GetDocumentation để lấy thông tin này. –
Hãy nhớ rằng câu hỏi của tôi là đối phó với tự động hóa. Đây là quá trình gọi các phương thức trên một giao diện thông qua COM và hoàn toàn độc lập với việc thực hiện các phương thức đó. Các coclasses và các giao diện trong câu hỏi có liên quan đến siêu dữ liệu (có thể truy cập thông qua ITypeInfo), và điều này không bao gồm tên của chúng. Trong mọi trường hợp, cảm ơn sự giúp đỡ của bạn. Tôi đánh giá cao nó! –