如何从vbScript调用.NET代码(C# / vb.net)?

6

我想我可以编译一个C# DLL,然后将其公开为COM对象,以便可以从VBscript中使用CreateObject调用。只是我不确定如何做到这一点...

3个回答

6
这可以很简单地完成。但有很多情况并不那么简单。这很大程度上取决于您的课程需要具备什么能力,以及您打算如何部署它。
需要考虑的一些问题:
  • 你的类必须有一个无参数构造函数。
  • 它不能公开静态方法。
  • 将COM DLL部署到全局程序集缓存中可以吗?如果不行,您需要为其提供强名称,并使用regasm /codebase进行注册。
  • 您是否在意标识类及其接口的GUID?如果不在意,可以让regasm分配它们,但每次(以及每个地方)注册类时都会有所不同。如果需要GUID保持不变,请使用Guid属性标记成员。
  • 您是否要使用.NET和COM之间的默认数据类型编组?如果不是,则需要使用MarshalAs属性标记属性和方法。
  • 您是否关心您的类公开哪种COM接口?如果是,您需要处理InterfaceType属性。
  • 您的类是否需要引发或响应事件?如果是,则对类接口的设计有影响。

这里有一篇非常好的(虽然有些过时)关于COM互操作和.Net的文章在这里。现在很多该文章提到的事情,比如生成类型库,都已经自动处理了。同时微软的文档也是最新的,但不是那么详细。


5

你应该使用regasm实用程序来注册程序集(就像使用regsvr32注册COM服务器一样)。然后你就可以从COM中使用它了。确保它已安装在GAC中。这些东西应该有[ComVisible(true)]才能从COM中使用。


1
每个项目都有一个“COM可访问”选项,您可以选择它。然后,当然,您必须注册程序集才能使用它,但这就是全部了。

我需要花点时间去寻找C#的选项(我习惯于VB.Net),但您可以通过在解决方案资源管理器中双击属性文件夹,选择应用程序选项卡,然后单击程序集信息...按钮来找到该选项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接