0

私は C# にかなり慣れていないので、Windows デスクトップ ガジェットの開発を支援するために少量の C# コードを使用する、これまで取り組んできた小さなサイド プロジェクトを完成させようとしています。基本的には、 RunGadgetメソッドIDesktopGadgetを使えるようにインターフェイスを実装しようとしています。

同様のインターフェースに関する情報を読んでこれまでに得たものは次のとおりです。

[ComImport]
[Guid("C1646BC4-F298-4F91-A204-EB2DD1709D1A")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IDesktopGadget
{
    uint RunGadget([MarshalAs(UnmanagedType.LPWStr)] string gadgetPath);
}

残念ながら、そこからオブジェクトを作成しようとするとエラーが発生します。 "Cannot create an instance of the abstract class or interface 'GadgetTask.IDesktopGadget'"

誰かが私を正しい方向に向け、同時に私が間違っていることを理解するのを助けることができますか?

4

2 に答える 2

1

インターフェイスを使用するには、実際には DesktopGadget オブジェクトの実装が必要です。MS は、Windows 7 でそれを行うための標準の COM オブジェクトを提供しています。次のような方法でインスタンスを作成できます。

Type t = Type.GetTypeFromCLSID(new Guid("924ccc1b-6562-4c85-8657-d177925222b6"));
IDesktopGadget dg = (IDesktopGadget)Activator.CreateInstance(t);
于 2009-12-17T22:24:43.693 に答える
0

指導ありがとうございます。もう少し簡単な助けのために、これは私のために働いたものです:

IDesktopGadget.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace GadgetActivator
{
    [ComImport]
    [Guid("C1646BC4-F298-4F91-A204-EB2DD1709D1A")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]

    interface IDesktopGadget
    {
        uint RunGadget([MarshalAs(UnmanagedType.LPWStr)] string gadgetPath);
    }
}

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace GadgetActivator
{
    class Program
    {
        static void Main(string[] args)
        {
            Type t = Type.GetTypeFromCLSID(new Guid("924ccc1b-6562-4c85-8657-d177925222b6"));
            IDesktopGadget dg = (IDesktopGadget)Activator.CreateInstance(t);
            dg.RunGadget(@"C:\Program Files\Windows Sidebar\Gadgets\xxxxxxxxx.Gadget");
        }
   }
}
于 2011-07-28T01:51:48.310 に答える