0

F# で COM から skype インスタンスを呼び出そうとしています。
目的は気分メッセージを取得することです。

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' が定義されていません

それも好き…

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

これにより、SKYPE4COMLibタイプで定義されたメンバー関数であるかのようにGetMoodにアクセスできます。

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