2008-12-10 7 views

Répondre

6

Cela peut être très simple à faire. Mais il y a beaucoup d'endroits où ce n'est pas si simple. Cela dépend beaucoup de ce que votre classe doit être capable de faire et de la façon dont vous avez l'intention de le déployer.

Quelques questions à considérer:

  • Votre classe doit avoir un constructeur sans paramètre.
  • Il ne peut pas exposer les méthodes statiques.
  • Le déploiement de votre DLL COM dans le cache de l'assembly global est-il OK? Sinon, vous devrez lui donner un nom fort et l'enregistrer en utilisant regasm /codebase.
  • Vous souciez-vous des GUID qui identifient la classe et ses interfaces? Sinon, vous pouvez les attribuer à regasm, mais ils seront différents à chaque fois (et à chaque endroit) où la classe est enregistrée. Si vous souhaitez que les GUID restent invariables d'une installation à l'autre, vous devez marquer les membres avec l'attribut Guid.
  • Allez-vous utiliser le marshaling par défaut des types de données entre .NET et COM? Si ce n'est pas le cas, vous devrez marquer les propriétés et les méthodes avec l'attribut MarshalAs.
  • Est-ce que cela vous importe quel type d'interface COM votre classe expose? Si c'est le cas, vous devrez traiter l'attribut InterfaceType.
  • Votre classe a-t-elle besoin d'élever ou de répondre à des événements? Si c'est le cas, il y a des implications sur la façon dont vous concevez votre interface de classe.

Il existe un très bon article (s'il est daté) sur COM interop et .Net here. (Beaucoup de choses dont parle cet article, comme la génération de bibliothèques de types, est gérée automatiquement pour vous maintenant.) Et Microsoft's documentation est à jour, mais pas tout à fait si détaillé.

5

Vous devez utiliser l'utilitaire regasm pour enregistrer un assembly (tout comme vous faites regsvr32 avec des serveurs COM). Ensuite, vous pouvez l'utiliser à partir de COM. Assurez-vous qu'il est installé dans le GAC. Les choses devraient avoir [ComVisible(true)] pour être utilisable par COM.

1

Il existe une option "COM accessible" pour chaque projet que vous pouvez sélectionner. Ensuite, bien sûr, vous devez enregistrer l'assembly pour l'utiliser, mais c'est à peu près tout.


je devais aller chasser un peu pour trouver C# (je suis habitué à VB.Net), mais vous pouvez trouver l'option en double-cliquant sur le dossier Properties dans la solution Explorer, le choix l'onglet Application, puis en cliquant sur le bouton Assembly Information....