如何在 F# 中创建 COM 可见 dll
How to create a COM visible dll in F#
我的目标是创建一个可以导入 VBA (Excel) 并在那里使用的 COM 可见类型。
Excel 对象浏览器可以看到我的 class 但看不到 class 的任何 public 方法并且在尝试调用 public 时失败方法。
我的 F# 代码:
namespace DotNetLibrary
type public Class1() =
member public this.DotNetMethod (x:string) = "Hello" + x
在AssemblyInfo.fs我也修改为[<assembly: ComVisible(true)>]
I 运行 regasm with switches /codebase /tlb
and an .tlb file is generated.
VBA 在参考浏览器中找到了我的库,但没有找到上面 Class1
上定义的 DotNetMethod
。
我已尝试按照本主题的 C# 指南到达我目前所在的位置,但我没有到达终点。
运行-时间错误
VBA无法运行该方法成功的原因是因为我使用了 32 位版本的 regasm 实用程序而不是 64 位版本来为 COM 注册类型库.鉴于我使用的是 64 位 Excel 它需要 64 位 COM 类型库。
编译时问题
VBA无法识别IDE中的方法的原因可能与上述有关,但也可能是由于接口问题引起的
@HansPassant 在上面的评论中。
我的目标是创建一个可以导入 VBA (Excel) 并在那里使用的 COM 可见类型。
Excel 对象浏览器可以看到我的 class 但看不到 class 的任何 public 方法并且在尝试调用 public 时失败方法。
我的 F# 代码:
namespace DotNetLibrary
type public Class1() =
member public this.DotNetMethod (x:string) = "Hello" + x
在AssemblyInfo.fs我也修改为[<assembly: ComVisible(true)>]
I 运行 regasm with switches /codebase /tlb
and an .tlb file is generated.
VBA 在参考浏览器中找到了我的库,但没有找到上面 Class1
上定义的 DotNetMethod
。
我已尝试按照本主题的 C# 指南到达我目前所在的位置,但我没有到达终点。
运行-时间错误
VBA无法运行该方法成功的原因是因为我使用了 32 位版本的 regasm 实用程序而不是 64 位版本来为 COM 注册类型库.鉴于我使用的是 64 位 Excel 它需要 64 位 COM 类型库。
编译时问题
VBA无法识别IDE中的方法的原因可能与上述有关,但也可能是由于接口问题引起的 @HansPassant 在上面的评论中。