我需要 IMessage 接口(interface)。在 C# 中我可以写
CDO.Message oMsg = new CDO.Message(); // ok
但是当我尝试在 F# 中执行此操作时
let oMsg = new CDO.Message()
我收到一条错误消息:
'new' cannot be used on interface types. Consider using an object expression '{ new ... with ... }' instead.
如何解决这个问题呢?
最佳答案
您需要使用在接口(interface)名称中添加了“类”的版本:
open System
[<EntryPoint>]
[<STAThread>]
let main argv =
let oMsg = new CDO.MessageClass()
oMsg.Subject <- "Hello World"
Console.WriteLine(oMsg.Subject)
Console.ReadLine() |> ignore
0
注意:我还必须明确添加对
Microsoft ActiveX Data Objects 6.0 Library
的引用。到项目以使对象实例化工作。如果您想使用特定接口(interface)而不是 Co-Class(如 Hans Passant 建议的那样),请使用将创建的 Co-Class 转换为接口(interface)的此版本,从而返回指向实际接口(interface)的指针。
open System
[<EntryPoint>]
[<STAThread>]
let main argv =
let oMsg = upcast new CDO.MessageClass() : CDO.IMessage
oMsg.Subject <- "Hello World"
Console.WriteLine(oMsg.Subject)
Console.ReadLine() |> ignore
0
关于f# - 如何在 F# 中创建 COM 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37226321/