je définir mes interfaces dans un fichier A.idl, que je Compile à A.tlbQueryInterface de out-of-process serveur COM sur l'interface Importés depuis TLB
Dans un projet VS2005 ATL "B" J'utilise importlib (A.tlb) dans B.idl et #import "A.tlb" dans stdafx.h et implémenter une interface IA à partir de A.tlb dans une classe COM ATL. Le projet génère un B.dll et un B.tlb
J'ajoute B.tlb aux références d'une application C# et dans le code I instancie l'objet COM.
L'instanciation fonctionne sans problème si je l'utilise soit
Type.GetTypeFromCLSID(); Activator.CreateInstance(...);
ou
[DllImport("ole32.dll", ...)] CoCreateInstance(...)
deux fins de travail, l'objet instancie et je peux le jeter à l'interface IA définie dans A.tlb (en fait un RCW généré à partir de la tlb) et invoquer ses méthodes. Toujours pas de problèmes.
Puis j'utilise OLEView pour activer l'activation de l'objet COM en utilisant le substitut DllHost.exe par défaut.
L'instanciation de l'objet COM au sein de la mère porteuse (paramètre CLSCTX_LOCAL_SERVER dans CoCreateInstance) est toujours sans problèmes, mais lorsque je tente de jeter l'objet à l'interface IA définie à A.tlb je reçois E_NOINTERFACE et message indiquant que QueryInterface a échoué car "Aucune interface de ce type n'est prise en charge".
Aidez-nous s'il vous plaît. Quel pourrait être le problème? Si vous avez besoin d'informations supplémentaires, je vais essayer de fournir autant que possible.
J'ai essayé de copier et coller tout le code idl de A.idl (struct et définitions d'interface) à B.idl, enlevé #import "A.tlb" et voila - Je peux lancer l'objet créé avec CoCreateInstance à IA et Utilisez-le sans problèmes. Cela implique que le bogue soit dans la façon dont A.tlb est compilé ou dans la façon dont j'inclue/importe la tlb ou quelque chose avec des entrées de registre pour les interfaces dans la tlb. Avez-vous des conseils sur l'utilisation correcte des interfaces définies dans un TLB? –