VBA 对象浏览器在我的 .NET dll 库中不显示类成员
本文关键字:显示 成员 dll 浏览器 对象 我的 NET VBA | 更新日期: 2023-09-27 18:33:45
我正在尝试制作一个简单的(无依赖关系).NET dll文件,可以从VBA(MS Office)访问。我正在使用VS2015 Express,并使我的dll成为最简单的方法:创建一个类库,添加一个简单的类,并选中选项"使程序集COM可见"以及"注册COM互操作"。
我的 C# 代码:
namespace TestLib {
public class Hello {
public int timestwo(int i) {
return 2 * i;
}
}
}
该库会在生成时自动添加到 Windows 注册表中。我可以从MS Office VBA编辑器中的工具-->参考中访问它,并且以下VBA代码按预期工作:
Sub test()
Dim h as TestLib.Hello
MsgBox h.timestwo(2)
End Sub
现在有趣的是:对象浏览器显示我的类,但没有成员函数!因此,自动完成功能不起作用...这是怎么回事?
嗯,在我看来,您对所做的事情的描述缺少几个步骤。您需要 GUID。你需要一个接口,你的类需要实现它。并且您需要指定类应如何使用接口。需要将其设置为类型"无",智能感知等才能正常工作。
这是我的 .NET COM DLL 的摘录,它确实出现在对象浏览器中,并在引用 VBA 项目时提供智能感知。
[Guid("149F7A5F-7DAC-4426-8AA0-28975A2CE203")]
[ComVisible(true)]
public interface ITest
{
string testLT(string FilePath, object Args);
string RemoveListTemplates(string FilePath, object Args);
void test(string arg);
}
[Guid("D86307C2-3FFA-4518-BABC-DA5F26ABC445")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
public class Test : ITest
在 VS 中,您需要在代码中添加 XML 注释:
namespace TestLib {
public class Hello {
/// <summary>
/// A method to return value * 2
/// </summary>
/// <param name="i">An integer to multiply by two</param>
public int timestwo(int i) {
return 2 * i;
}
}
}
然后,确保选中XML Documentation File
的复选框,并确保 XML 文件与程序集同名。这应提供填充智能感知功能所需的元数据。