我需要IMessage接口。在C#中我可以写如何在F#中创建COM对象#
CDO.Message oMsg = new CDO.Message(); // ok
但是当我尝试这样做在F#
let oMsg = new CDO.Message()
我得到一个错误信息:
'新' 不能在接口类型使用。考虑使用对象表达式'{new ... with ...}'来代替。
如何解决这个问题?
我需要IMessage接口。在C#中我可以写如何在F#中创建COM对象#
CDO.Message oMsg = new CDO.Message(); // ok
但是当我尝试这样做在F#
let oMsg = new CDO.Message()
我得到一个错误信息:
'新' 不能在接口类型使用。考虑使用对象表达式'{new ... with ...}'来代替。
如何解决这个问题?
您需要使用具有“类”添加到接口名称版本:
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
http://stackoverflow.com/questions/37145234/how-to-convert-c-sharp-code-that-uses-shell-com-to-f/37150493#37150493 –
有趣的是: COM类型提供程序的F#](https://fsprojects.github.io/FSharp.ComProvider/) –