2010-09-19 31 views

Trả lời

4

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); 
+0

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! –

+1

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. –

+1

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ó! –

4

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.

+0

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? –

+1

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. –

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