J'imagine que je peux compiler une DLL C#, puis l'exposer comme un objet COM afin qu'il puisse être CreateObject'd à partir de VBScript. Je ne suis pas sûr que les étapes impliquées dans ce faire ...Comment appeler le code .NET (C#/vb.net) à partir de vbScript?
Répondre
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'attributGuid
. - 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é.
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.
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...
.