Как создать COM-объект в F#

мне нужен интерфейс IMessage. В C# я мог бы написать

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

но когда я пытаюсь сделать это в F#

let oMsg = new CDO.Message()

Я получаю сообщение об ошибке:

' new ' не может использоваться для типов интерфейса. Рассмотрим использование выражения объекта " { new ... с... }' вместо.

Как решить эту проблему?

1 ответов


вам нужно использовать версию, которая имеет" класс", добавленный к имени интерфейса:

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 (как предложил Ханс Пассант), используйте эту версию, которая приводит созданный 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