我需要IMessage接口。在C#中我可以写
CDO.Message oMsg = new CDO.Message(); // ok
但是当我尝试在F#中执行此操作时
let oMsg = new CDO.Message()
我收到错误消息:
'new'不能用于接口类型。请考虑使用对象表达式“{new ... with ...}”。
如何解决这个问题?
答案 0 :(得分:10)
您需要使用在接口名称中添加“Class”的版本:
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
的引用,以使对象实例化工作。
如果您想使用特定接口而不是Co-Class(由Hans Passant提出),请使用此版本将创建的Co-Class强制转换为接口,从而返回指向实际接口的指针。 / p>
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