0

我尝试在 F# 上通过 COM 调用 skype 实例。
一个目标是获取情绪信息。

测试文件

// 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:未定义值或构造函数“情绪”
第 3 行:错误 FS0039:未定义值或构造函数“情绪”

也这样……

4

2 回答 2

2

您的代码有几个问题。首先,您的SKYPE4COM类的构造函数似乎是递归的(?!),如果您尝试创建实例,这将导致堆栈溢出。其次,您收到的错误是因为您正在使用new运算符,但您尚未完成对构造函数的调用(即您需要使用括号应用构造函数:)let aSkype = new SKYPE4COM()。尽管如此,您还有另一个问题,因为您的类型没有公开CurrentUserProfile属性,因此您的代码仍然无法工作。

尝试这样的事情:

open SKYPE4COMLib

let getMood() =
  SkypeClass().CurrentUserProfile.MoodText
于 2009-12-18T20:39:33.723 回答
1

考虑使用类型扩展将成员添加到现有类型:

open SKYPE4COMLib

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

这将允许您访问 GetMood,就好像它是在 SKYPE4COMLib 类型上定义的成员函数一样:

let x = new SKYPE4COMLib()
printfn "%A" (x.GetMood())
于 2009-12-21T14:03:45.580 回答