Frage

Ich bin ziemlich neu in C#, ich versuche, ein kleines Nebenprojekt abzuschließen, an dem ich gearbeitet habe und das eine kleine Menge C# Code verwendet, um die Entwicklung eines Windows -Desktop -Geräts zu unterstützen. Grundsätzlich versuche ich das implementieren IDesktopGadget Schnittstelle, damit ich das verwenden kann Rungadget Methode.

Folgendes habe ich so weit davon entfernt, Informationen über ähnliche Schnittstellen zu lesen:

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

Leider bekomme ich einen Fehler, wenn ich versuche, ein Objekt daraus zu erstellen: "Cannot create an instance of the abstract class or interface 'GadgetTask.IDesktopGadget'"

Kann mich jemand in die richtige Richtung zeigen und mir vielleicht helfen, zu verstehen, was ich gleichzeitig falsch mache?

War es hilfreich?

Lösung

Sie benötigen tatsächlich eine Implementierung des Desktopgadget -Objekts, um die Schnittstelle zu verwenden. MS bietet ein Standard -COM -Objekt, um dies unter Windows 7 zu tun. Sie können eine Instanz erstellen, indem Sie so etwas wie folgt:

Type t = Type.GetTypeFromCLSID(new Guid("924ccc1b-6562-4c85-8657-d177925222b6"));
IDesktopGadget dg = (IDesktopGadget)Activator.CreateInstance(t);

Andere Tipps

Danke für die Anleitung. Für mich hat dies für mich funktioniert: Dies hat für mich funktioniert:

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);
    }
}

Programm.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");
        }
   }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top