【发布时间】:2017-10-25 02:37:19
【问题描述】:
我的目标是创建一个可以导入 VBA (Excel) 并在那里使用的 COM 可见类型。
Excel 对象浏览器可以看到我的类,但看不到该类的任何公共方法,并在尝试调用公共方法时失败。
我的 F# 代码:
namespace DotNetLibrary
type public Class1() =
member public this.DotNetMethod (x:string) = "Hello" + x
在 AssemblyInfo.fs 中我也修改为[<assembly: ComVisible(true)>]
我使用 /codebase /tlb 的开关运行 regasm 并生成一个 .tlb 文件。
VBA 在参考浏览器中找到了我的库,但没有选择上面Class1 上定义的DotNetMethod。
我已尝试按照此主题的 C# 指南到达我目前的位置,但我没有到达终点线。
【问题讨论】:
-
我似乎记得你必须创建一个接口并为其及其所有成员添加属性。
-
PS:我发现 Excel-DNA 是一种让 Excel 可以使用 C#/F# 方法的方法比使用 COM 更好。
-
COM 严重依赖接口,实现隐藏在对象工厂后面。类在设计上不是直接可见的,默认的 [ClassInterface] 属性是 ClassInterfaceType.AutoDispatch,因此该类仅可用于后期绑定。这很好,但 VBA 编辑器更喜欢 AutoDual,因此它可以提供自动完成功能。最好明确声明接口。
-
@MarkPattison 我知道 Excel-DNA,但我的印象是它更适用于 Excel-Wide 加载项,而不是单个工作簿与 .NET 的互操作