Как можно вызвать экземпляр по COM? - PullRequest
0 голосов
/ 18 декабря 2009

Я пытаюсь вызвать экземпляр Skype через COM на F #.
Цель - получить сообщение о настроении.

test.fs

// Import skype4com Api
open SKYPE4COMLib

type SKYPE4COM =
    new() = new SKYPE4COM()

let GetMood =
    let aSkype = new SKYPE4COM
    mood <- aSkype.CurrentUserProfile.MoodText
    mood

Но при сборке (раньше тоже) происходит ошибка.

Неполная структурированная конструкция в или до этой точки в выражении

Заранее спасибо.

это следующая версия, что я думаю.

test01.fs

// Import skype4com Api
open SKYPE4COMLib

let GetMood =
    let aSkype = new SKYPE4COMLib()              // line 1
    mood <- aSkype.CurrentUserProfile.MoodText   // line 2
    mood                                         // line 3

сообщение об ошибке (при сборке).
строка в 1: ошибка FS0039: тип 'SKYPE4COMLib' не определен
строка в 2: ошибка FS0039: значение или конструктор 'mood' не определены
строка в 3: ошибка FS0039: значение или конструктор 'mood' не определены

тоже так ...

Ответы [ 2 ]

2 голосов
/ 18 декабря 2009

Ваш код имеет несколько проблем. Прежде всего, ваш конструктор для класса SKYPE4COM выглядит рекурсивным (?!), Что приведет к переполнению стека, если вы попытаетесь создать экземпляр. Во-вторых, ошибка, которую вы получаете, заключается в том, что вы используете оператор new, но вы не завершили вызов конструктора (т. Е. Вам нужно применить конструктор, используя скобки: let aSkype = new SKYPE4COM()). Однако даже тогда у вас есть другая проблема, потому что ваш тип не предоставляет свойства CurrentUserProfile, поэтому ваш код все равно не будет работать.

Попробуйте что-то вроде этого:

open SKYPE4COMLib

let getMood() =
  SkypeClass().CurrentUserProfile.MoodText
1 голос
/ 21 декабря 2009

Попробуйте использовать Расширение типа для добавления члена к уже существующему типу:

open SKYPE4COMLib

type SKYPE4COMLib with
    member this.GetMood() =
        aSkype.CurrentUserProfile.MoodText

Это позволит вам получить доступ к GetMood, как если бы это была функция-член, определенная в типе SKYPE4COMLib:

let x = new SKYPE4COMLib()
printfn "%A" (x.GetMood())
...