F# F中的ComImport#

F# F中的ComImport#,f#,F#,我正在尝试将一些代码从C#转换为F#,特别是创建快捷方式的代码,从这里开始: C#中的代码如下: 我把它翻译成F#as: [] [] [] 类型CShellLink()=类结束 不幸的是,当我切换到F#实现时,我得到一个运行时错误:“导入中具有非零RVA的方法”。这似乎与此处报告的错误相同: 有什么解决办法吗?我正在尝试将应用程序移植为仅使用F#,因此如果不能用F#编写,则必须重新考虑该项目。这看起来像是F#编译器中的一个限制:它无法使用ComImportAttribute定义现有的COM类,

我正在尝试将一些代码从C#转换为F#,特别是创建快捷方式的代码,从这里开始:

C#中的代码如下:

我把它翻译成F#as:

[]
[]
[]
类型CShellLink()=类结束
不幸的是,当我切换到F#实现时,我得到一个运行时错误:“导入中具有非零RVA的方法”。这似乎与此处报告的错误相同:


有什么解决办法吗?我正在尝试将应用程序移植为仅使用F#,因此如果不能用F#编写,则必须重新考虑该项目。

这看起来像是F#编译器中的一个限制:它无法使用ComImportAttribute定义现有的COM类,它只适用于接口。你能用这个作为解决办法吗

let shellLink = 
    let ty = System.Type.GetTypeFromCLSID (System.Guid "00021401-0000-0000-C000-000000000046")
    Activator.CreateInstance ty

你可以用C编写一个薄包装,然后调用用F编写的实际函数this@John:是的,但是我必须有一个混合的C/F项目,如果有额外的构建规则等,那么额外的复杂性成本将相当高。@NeilMitchell,我可以发誓,我之所以能够做到这一点,是因为我尝试做了几乎相同的事情。我看看能不能找到我的密码,我会帮你贴出来的。
[<GuidAttribute("00021401-0000-0000-C000-000000000046")>]
[<ClassInterfaceAttribute(ClassInterfaceType.None)>]
[<ComImportAttribute()>]
type CShellLink() = class end
let shellLink = 
    let ty = System.Type.GetTypeFromCLSID (System.Guid "00021401-0000-0000-C000-000000000046")
    Activator.CreateInstance ty