2010-09-19 7 views

risposta

4

Ok. È risultato essere piuttosto semplice. Devi solo chiamare il metodo ITypeInfo.GetDocumentation con l'ID membro impostato su MEMBERID_NIL (-1). In questo modo:

CComBSTR typeName; 
hr = typeInfo->GetDocumentation(MEMBERID_NIL, &typeName, NULL, NULL, NULL); 

Se stai programmazione in .NET, quanto sopra è convenientemente eseguita per voi con il metodo Marshal.GetTypeInfoName:

// using System.Runtime.InteropServices; 
string typeName = Marshal.GetTypeInfoName(typeInfo); 
+0

Sei sicuro che questo non restituisca solo il contenuto dell'attributo [helpstring] associato a una co-classe? Sono felice di aver dimostrato di aver sbagliato! –

+1

Inoltre, l'implementazione sottostante di una co-classe COM potrebbe non essere nemmeno un tipo di classe (vedere http://www.codeproject.com/KB/COM/com_in_c1.aspx per un esempio di come scrivere una COM oggetto in piano C). La nozione di "classe" è interamente dipendente dalla lingua e dubito che si possa fare affidamento sul metodo GetDocumentation per ottenere queste informazioni. –

+1

Ricorda che la mia domanda riguarda l'automazione. Questo è il processo di chiamare i metodi su un'interfaccia tramite COM ed è completamente indipendente dall'implementazione di questi metodi. Le coclea e le interfacce in questione hanno associato i metadati (accessibili tramite ITypeInfo) e questo include i loro nomi. In ogni caso, grazie per il tuo aiuto. Lo apprezzo! –

4

La risposta breve: non è possibile utilizzare ITypeInfo. È possibile ottenere il prog ID della classe utilizzando l'API Win32 ProgIDFromCLSID. In COM il nome della classe C++, Visual Basic o .NET sottostante che implementa l'interfaccia COM o la co-classe è praticamente priva di significato. Solo gli ID di interfaccia, gli ID di classe e gli ID programmatici hanno un significato al di là del codice sorgente dell'implementazione della co-classe: solo questi possono essere utilizzati per attivare gli oggetti COM utilizzando CoCreateInstance casting e runtime utilizzando QueryInterface.

+0

Bene, supponiamo di avere una ragione valida per questo (ma forse Io non). Ad ogni modo, sei sicuro che sia impossibile? Sembra che le varie utilità di libreria di tipo Microsoft siano in grado di enumerare queste informazioni. Come lo fanno? –

+1

Bene, molto spesso l'ID prog viene scelto in modo che sia uguale o simile al nome della classe C++, ma questa è solo una convenzione. La maggior parte delle utilità di libreria dei tipi enumerano le informazioni nel registro di Windows o nei file .tlb che trattano esclusivamente di ID di classe, ID di interfaccia e ID prog. In definitiva, è interamente all'implementazione di 'DllGetClassObject' nella DLL del server COM per associare questi valori COM alla classe C++. –

Problemi correlati