我试图创建一个可从VBA(MS Office)访问的简单(无依赖项).NET dll文件。我使用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
现在有趣的是:对象浏览器显示我的类,但没有成员函数!因此,自动完成功能不起作用......这里发生了什么?
答案 0 :(得分:3)
在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文件与程序集具有相同的名称。这应该提供填充IntelliSense功能所需的元数据。
答案 1 :(得分:1)
这是我的.NET COM DLL的一个摘录,它出现在对象浏览器中,并在为VBA项目引用时提供Intellisense。
[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