Dovrebbe essere una semplice domanda, ma la ricerca della documentazione mi sta facendo impazzire. Supponiamo di avere un puntatore ITypeInfo per una coclea o un'interfaccia. Come ottengo il nome di quella classe o interfaccia?Come posso utilizzare un puntatore ITypeInfo per ottenere il nome del tipo?
risposta
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);
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
.
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? –
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++. –
- 1. Come ottenere il nome completo del tipo?
- 2. Come posso ottenere il nome del modello o il tipo di contenuto di un oggetto Django?
- 3. Come caricare un tipo dal nome del tipo e il nome del gruppo di
- 4. Come posso ottenere il nome del file da request.FILES?
- 5. Come posso ottenere il nome del pacchetto in Android?
- 6. Come ottenere il nome del paese
- 7. Come posso ottenere il parametro del nome f.submit nel controller?
- 8. Come posso ottenere il nome del computer locale in C#?
- 9. Come posso ottenere il nome del programma in Racket?
- 10. Come posso ottenere il nome dell'immagine dall'URL?
- 11. android, come ottenere il nome del pacchetto?
- 12. Come posso ottenere il nome di un file in Dart?
- 13. Come posso ottenere il tipo System.Windows.Controls.Primitive.PopupRoot?
- 14. Come posso ottenere il nome (o il nome completo) dell'utente del telefono?
- 15. Come utilizzare noreturn con il puntatore funzione?
- 16. Come posso ottenere il nome dell'azione in un controller Symfony2?
- 17. Come si può trasmettere a un tipo usando il nome del tipo come stringa?
- 18. Come posso ottenere ConnectionString nome per il file di configurazione
- 19. Come posso ottenere il nome di un oggetto in java?
- 20. Data un'istanza di tipo, come ottenere il nome del tipo generico in C#?
- 21. Ottieni nome file dal puntatore del file
- 22. Come utilizzare Spring per ottenere il valore di un Enum
- 23. Da un file incluso, come posso ottenere il nome file del file facendo il compreso?
- 24. (Django) come ottenere il nome del mese?
- 25. Come ottenere il nome del tag precedente?
- 26. Non posso semplicemente ottenere il nome del giorno I18n-ed?
- 27. Come posso digitare un puntatore a funzione che accetta una funzione del proprio tipo come argomento?
- 28. Ricerca di un oggetto per nome del tipo tramite DTE
- 29. Come posso ottenere il mio codice paese del dispositivo Android senza utilizzare il GPS?
- 30. Come utilizzare Django per ottenere il nome per il server host?
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! –
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. –
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! –