如何在F#中创建COM对象

时间:2016-05-14 11:52:46

标签: f# com

我需要IMessage接口。在C#中我可以写

CDO.Message oMsg = new CDO.Message(); // ok

但是当我尝试在F#中执行此操作时

let oMsg = new CDO.Message()

我收到错误消息:

  

'new'不能用于接口类型。请考虑使用对象表达式“{new ... with ...}”。

如何解决这个问题?

1 个答案:

答案 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