我需要IMessage接口.在C#我可以写
CDO.Message oMsg = new CDO.Message(); // ok
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在F#中这样做时
let oMsg = new CDO.Message()
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息:
'new'不能用于接口类型.考虑使用对象表达式'{new ... with ...}'.
如何解决这个问题呢?
Nin*_*rry 11
您需要使用在接口名称中添加"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
Run Code Online (Sandbox Code Playgroud)
注意:我还明确地必须添加Microsoft ActiveX Data Objects 6.0 Library对项目的引用以使对象实例化起作用.
如果您想使用特定接口而不是Co-Class(由Hans Passant提出),请使用此版本将创建的Co-Class强制转换为接口,从而返回指向实际接口的指针.
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
Run Code Online (Sandbox Code Playgroud)