如何在 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
我需要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