如何在 F# 中创建 COM 对象

How to create a COM object in F#

我需要IMessage接口。在 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.

如何解决这个问题?

您需要使用接口名称中添加了"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 转换为接口的版本,从而返回指向实际接口的指针。

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