J'ai utilisé une bibliothèque COM 32 bits en l'enregistrant avec regsvr32 et tout fonctionne correctement. Comme j'ai besoin d'y accéder à partir d'un processus 64 bits, je l'enregistre maintenant en tant que COM + via l'outil d'administration de Component Services. Le problème est, il semble que toutes les interfaces COM ne sont plus exposées. Quelles pourraient être les raisons de cela?L'enregistrement dans COM + expose moins d'interfaces que Regsvr32
Répondre
Il existe deux aspects de ce problème. D'abord, vous contrôlez manuellement les classes exposées via COM + en ajoutant ces classes uniquement dans l'application COM +. Les classes que vous n'incluez pas seront instanciées dans-proc et cette instanciation échouera simplement en raison de l'incompatibilité 32 bits/64 bits.
Puis vient le marshaling. Afin de donner au consommateur un pointeur d'interface de l'objet nouvellement créé, COM + doit savoir comment gérer cette interface. À moins que vous n'impliquiez la mise en place de votre propre rassemblement par défaut, vous l'utilisez. Le marshaling par défaut ne fonctionnera que si les conditions suivantes sont remplies: le serveur COM contient une bibliothèque de types, l'interface est incluse dans cette bibliothèque de types et l'interface est entièrement compatible avec Automation. Ce dernier signifie à peu près qu'aucune des méthodes de cette interface n'a de paramètres de types personnalisés comme les structures par exemple (les interfaces sont correctes). Si ces conditions ne sont pas remplies, COM + renvoie E_NOINTERFACE lorsque le consommateur appelle CoCreateInstance() ou IUnknown :: QueryInterface(). Voir cette question similaire: What is required to enable marshaling for a COM interface? Vous avez fondamentalement trois choix: ne pas interroger l'interface de violation, mettre en œuvre le marshaling personnalisé (dont je ne sais pas par où commencer) ou introduire une nouvelle interface intermédiaire qui serait compatible avec l'automatisation.
- 1. C# COM DLL: est-ce que j'utilise Regasm, ou Regsvr32?
- 2. Autorité Regsvr32 et Desktop
- 3. Expose DependencyProperty
- 4. Evénement Expose OnSelectedIndexChanged dans CompositeControl
- 5. Est-ce que std :: stack expose des itérateurs?
- 6. Expose une bibliothèque de classes en tant que service WCF
- 7. Expose plusieurs collections en tant que collection unique
- 8. Expose un objet .net spécifique en tant que JSON
- 9. WPF UserControl expose ActualWidth
- 10. Comment vérifier que [out] params dans COM peut être utilisé?
- 11. MOINS dans MySQL?
- 12. Comment réparer un regsvr32 cassé qui plante?
- 13. Comment créer une distribution moins quelques paquets dans maven?
- 14. Comment annuler l'annulation de l'enregistrement des dll COM initialement ajoutées à RegSvr32 lorsque l'argument/u ne fonctionne pas?
- 15. Expose version du MEF chargée « plugin »
- 16. COM-Free COM dans une application ASP.Net
- 17. Enregistrer un composant C# COM?
- 18. Expose la mémoire en lecture seule
- 19. Hudson - sauvegarder les artefacts que lorsque moins de 90% passe
- 20. Activation sans enregistrement des composants COM
- 21. validate au moins un dans has_and_belongs_to_many
- 22. Comment déboguer une exception d'enregistrement de DLL post-compilation regsvr32?
- 23. Sorties tous moins un
- 24. ASP.NET, IIS et COM
- 25. jQuery valider moins de
- 26. Java: Modificateur d'accès plus restrictif que 'protected', moins restrictif que 'private'?
- 27. Fonctionnalités moins connues mais utiles dans Eclipse
- 28. autre question mysql moins
- 29. Python 3.0 Windows/COM
- 30. Server.MapPath dans un composant COM