【发布时间】:2014-08-03 07:07:21
【问题描述】:
如果我在 C#/.NET 类库中定义一个类,那么通过使其 COM 可见,我可以实例化该类并使用 COM 从 VBA 调用其方法。
有没有办法从 VBA 中调用此类的静态方法?
【问题讨论】:
-
您需要创建一个实例方法来包装 COM 的静态方法。
-
@JackMalkovich:链接说“COM 不支持静态方法”,所以是的,这确实回答了我的问题(“否”)。随意将其作为答案。
-
@vcsjones:是的,我可以,但这是我试图避免的。我有一个不需要默认构造函数的类,我计划使用静态 Create() 方法来允许 COM 调用者创建它们。看起来 Create 方法必须是另一个类的实例成员。什么皮塔饼。
-
您可以使用
Dim ClassObject: Set ClassObject = GetObject("clsid:CLSID")(其中CLSID是没有{ 和} 的字符串格式化程序类ID)来获取类对象。我从未尝试过使用 C#/.NET 类,但如果类支持 IDispatch,您可以使用它来执行Dim Object: Set Object = ClassObject.Create(),而不是更常见的Dim Object: Set Object = CreateObject("Prog.Id"),它将调用类的IClassFactory::CreateInstance。尽管如此,我强烈建议您创建一个合适的工厂。