如何在F#中创建COM可见dll

时间:2017-10-24 15:46:45

标签: excel vba f# com

我的目标是创建一个COM Visible Type,可以导入VBA(Excel)并在那里消费。

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在参考浏览器中找到我的库,但没有选择上面DotNetMethod上定义的Class1

我已经尝试按照C#指导来了解这个主题,但是我还没到达终点。

1 个答案:

答案 0 :(得分:1)

运行时错误

VBA无法成功运行该方法的原因是因为我使用了32位版本的regasm实用程序而不是64位版本来为COM注册类型库。鉴于我使用的是64位Excel,它需要64位COM类型库。

编译时问题

VBA无法识别IDE中的方法的原因可能与上述有关,但也可能是由于接口问题引起的 @HansPassant在上面的评论中。