2

私はいくつかのコードを C# から F# に変換しようとしています。具体的には、ここからショートカットを作成するコードです

C# のコードは次のとおりです。

[GuidAttribute("00021401-0000-0000-C000-000000000046")]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
[ComImportAttribute()]
private class CShellLink{}

私はF#に次のように翻訳しました:

[<GuidAttribute("00021401-0000-0000-C000-000000000046")>]
[<ClassInterfaceAttribute(ClassInterfaceType.None)>]
[<ComImportAttribute()>]
type CShellLink() = class end

残念ながら、F# の実装に切り替えると、「インポートでゼロ以外の RVA を持つメソッド」という実行時エラーが発生します。これは、ここで報告されているエラーと同じようです: http://social.msdn.microsoft.com/Forums/en-US/fsharpgeneral/thread/dada2004-5218-4089-8918-eed2464bbbcd

回避策はありますか?F# のみを使用するようにアプリケーションを移植しようとしているので、これが F# で記述できない場合は、そのプロジェクトを再考する必要があります。

4

1 に答える 1

5

これは F# コンパイラの制限のようです。ComImportAttribute を使用して既存の COM クラスを定義することはできず、インターフェイスに対してのみ機能します。これを回避策として使用できますか?

let shellLink = 
    let ty = System.Type.GetTypeFromCLSID (System.Guid "00021401-0000-0000-C000-000000000046")
    Activator.CreateInstance ty
于 2012-04-30T22:10:25.490 に答える