gpt4 book ai didi

f# - F# 中的 ComImport

转载 作者:行者123 更新时间:2023-12-02 05:45:07 28 4
gpt4 key购买 nike

我正在尝试将一些代码从 C# 转换为 F#,特别是创建快捷方式的代码,来自此处:http://vbaccelerator.com/home/NET/Code/Libraries/Shell_Projects/Creating_and_Modifying_Shortcuts/ShellLink_Code_zip_ShellLink/ShellLink_cs.asp

C# 中的代码如下:

[GuidAttribute("00021401-0000-0000-C000-000000000046")]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
[ComImportAttribute()]
private class CShellLink{}

我将其翻译成 F# 为:

[<GuidAttribute("00021401-0000-0000-C000-000000000046")>]
[<ClassInterfaceAttribute(ClassInterfaceType.None)>]
[<ComImportAttribute()>]
type CShellLink() = class end

不幸的是,当我切换到 F# 实现时,我收到一个运行时错误:“Method with non-zero RVA in an Import”。这似乎与此处报告的错误相同:http://social.msdn.microsoft.com/Forums/en-US/fsharpgeneral/thread/dada2004-5218-4089-8918-eed2464bbbcd

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

最佳答案

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

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

关于f# - F# 中的 ComImport,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10383041/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com