2010-05-13 14 views
3

Je reçois l'adresse d'une fonction COM en chargeant la bibliothèque de types (TLB) et en itérant sur les types en utilisant ITypeLib et ITypeInfo. Après avoir appelé la fonction AddressOfMember de ITypeInfo Je suis face à l'exception suivante:Pourquoi une exception s'est produite lors de l'obtention de l'adresse de la fonction COM?

System.Runtime.InteropServices.COMException (0x800288BD): type de module incorrect pour l'opération. (Exception de HRESULT: 0x800288BD (TYPE_E_BADMODULEKIND)) à System.Runtime.InteropServices.ComTypes.ITypeInfo.AddressOfMember (memid Int32, INVOKEKIND invKind, IntPtr & ppv).

Comment puis-je me débarrasser de cette exception?

+0

Etes-vous sûr que l'interface sur laquelle vous essayez d'obtenir l'adresse supporte la liaison vtable? – tyranid

+0

Je lui ai donné IDispatch interface double implémentée COM composant échoue toujours. Plus sur Mes toutes les interfaces héritées de IUnknown et quand GetNames (..) m'a donné "QueryInterface", il a échoué ici aussi et ici FUNCDESC.memid (certains par exemple 1245781) semblait faux. Je suis étrange tout ce qui est énuméré correctement avec ITypeInfo et toutes les autres structures mais AddressOfMember ne parvient pas à livrer l'adresse – Usman

+0

Je pense que tous les composants COM liés à IUnknown sont vtabled binded. – Usman

Répondre

1

Je ne suis pas sûr, n'avez pas fait ce genre de chose avant, mais vous dites que vous chargez le fichier tlb? Il se peut que pour addressofmember vous devez charger la dll qui contient l'objet com, je pensais que le fichier tlb était juste une description des interfaces, et donc addressofmember n'aurait aucun code à charger.