2 回答
TA贡献1804条经验 获得超3个赞
正如Zohar Peled所建议的,最好的方法是使用RegAsm.exe:
创建一些 C# 类库“TestProject”:
using System.Windows.Forms;
namespace TestProject
{
// Note. Only public classes are exported to COM!
public class Test
{
// Note. Only public methods are exported to COM!
public void testIt() {
MessageBox.Show("Yellow world");
}
}
}
重要提示:只有公共类被导出到 COM。并且只有这些类的公共方法可通过 COM 对象实例使用。
签署项目。
在 AssemblyInfo.cs 中设置[assembly: ComVisible(false)]为[assembly: ComVisible(true)]. 注意:您还可以在要向 COM 公开的每个类之前使用属性 [ComVisible(true)]。这只是将默认设置设置为true在构建 API 时更容易使用
构建项目。
运行 regasm。请记住使用正确版本的 Regasm(32 位/64 位)和适用于您的 .NET 框架的版本:
# .NET v4.5 64-bit
"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe" -tlb -codebase "C:\Users\sancarn\Desktop\tbd\TestProject\TestProject\bin\Debug\TestProject.dll" -verbose
# .NET v4.5 32-bit
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" -tlb -codebase "C:\Users\sancarn\Desktop\tbd\TestProject\TestProject\bin\Debug\TestProject.dll" -verbose
...
Regasm 应该输出如下内容:
Microsoft .NET Framework Assembly Registration Utility version 4.7.3056.0
for Microsoft .NET Framework version 4.7.3056.0
Copyright (C) Microsoft Corporation. All rights reserved.
Types registered successfully
Type 'TestProject.Test' exported.
Assembly exported to 'C:\Users\sancarn\Desktop\tbd\TestProject\TestProject\bin\Debug\TestProject.tlb', and the type library was registered successfully
现在您可以在 VBScript 中测试该文件,例如:
Dim o As Object
Set o = CreateObject("TestProject.Test")
Call o.testIt
TA贡献1853条经验 获得超6个赞
请注意,这会使您的项目中所有与 COM 兼容的类也对 COM 可见,而您可能不希望出现这种情况(请参阅此处和此处)。如果您没有明确设置 UUID,如果您使用 VB 或 VBA(不是 VBScript,后者是后期绑定的)等早期绑定客户端访问类,那么您在部署时就会遇到问题。
是的,它不是“干净的”,但 COM 也不是,尤其是当您想将它公开给后期绑定客户端实时 VBScript 时。
我还将您的公共字段更改为属性,这对公共成员来说更标准:
[Guid("EAA4976A-45C3-4BC5-BC0B-E474F4C3C83F")]
public interface IKlass
{
[DispId(0)]
public int value {get; set;}
[DispId(1)]
public void doSomething();
}
- 2 回答
- 0 关注
- 198 浏览
添加回答
举报