2009-09-24 5 views
0

J'ai un composant COM in-proc ATL C++. Ce composant n'est pas destiné à un usage externe - j'en ai seulement besoin pour une utilisation dans notre application.Est-il possible d'interdire de mettre mon composant in-proc dans COM +?

De temps en temps, les utilisateurs le placent dans COM +, ce qui conduit à toutes sortes d'erreurs bizarres - "Accès refusé", etc. dont je ne veux jamais entendre parler. Le meilleur moyen serait de faire quelque chose qui interdirait de placer le composant dans COM + afin qu'il ne puisse être utilisé que comme serveur in-proc. Y a-t-il un moyen de faire cela?

Répondre

1

Implémentez-vous seulement vos propres interfaces? Si oui, vous devriez être capable de les marquer "[local]" dans l'IDL, puis dépouiller le module de toutes les informations de marshalling (bibliothèque de types, P/S), etc

S'il n'y a aucune base pour le marshalling disponible , COM + ne devrait pas pouvoir enregistrer le module. Le mécanisme d'interception de COM + repose sur le fait de forcer des objets dans un contexte distant et de se placer entre le proxy et le talon et les parties correspondantes. Donc, si vous supprimez toutes les opportunités de rassemblement, il ne devrait pas être capable d'intercepter vos méthodes d'interface.

+0

J'ai vérifié toutes les choses que vous suggérez mais COM + est heureux d'ajouter le composant. Je suppose que ce sera inutilisable - CoCreateInstance() échouera avec différentes plaintes comme "interface non supporté" - mais c'est en fait le même problème que j'ai commencé avec. Donc, au lieu de régler le problème, j'ai rétréci la surface d'où il pourrait provenir. Généralement, les utilisateurs ajoutent notre composant car son ProgID figure dans la liste des composants enregistrés et est similaire aux ProgID de nos autres composants. Donc, ils "ajoutent tout". J'ai changé le code d'exposition de registre de sorte qu'il expose seulement le ClassId ... – sharptooth

+0

... et espère que le problème ne nous dérangera jamais encore. Merci beaucoup pour les suggestions de toute façon - maintenant nous savons que ces étapes ne résolvent pas vraiment le problème. – sharptooth

+0

Merci pour les informations de suivi! –

1

Empêcher l'enregistrement de votre module est finalisé, puis utilisez votre DLL comme décrit dans cet article Creating COM objects directly from the dll.

+0

Bonne idée. D'autant plus que je redistribue toujours le composant COM et qu'il se trouve toujours dans le même dossier que son consommateur. – sharptooth

Questions connexes