2009-12-17 2 views
0

저는 C#을 처음 접했을 때 약간의 C# 코드를 사용하여 Windows 바탕 화면을 개발하는 작은 프로젝트를 완료하려고합니다. 간단한 기계 장치. 기본적으로 RunGadget 메서드를 사용할 수 있도록 IDesktopGadget 인터페이스를 구현하려고합니다. "Cannot create an instance of the abstract class or interface 'GadgetTask.IDesktopGadget'"C# : Windows 셸 인터페이스 참조

누군가가 날 지점 수 : 여기

내가 유사한 인터페이스에 대한 정보를 읽는 지금까지 가지고 무엇을 : 나는 시도하고 그것에서 개체를 만들 때 불행하게도

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

을, 오류가 발생합니다 올바른 방향과 어쩌면 내가 뭘 잘못하고 있는지 이해하는 데 도움이 될까요?

답변

1

실제로 인터페이스를 사용하려면 DesktopGadget 객체의 구현이 필요합니다. MS는 Windows 7에서 표준 COM 개체를 제공합니다. 다음과 같이 인스턴스를 만들 수 있습니다.

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

감사합니다. Guid를 인터페이스의 클래스 ID로 대체해야합니까? –

+0

"클래스에 등록되지 않은 오류가 발생했습니다"라는 이유가 확실하지 않습니다. 내 레지스트리에서 바로 인터페이스의 클래스 ID를 뽑았습니다. –

+0

아니요, Guid는 인터페이스가 아닌 개체의 CLSID입니다. 그 GUID는 SDK 헤더의 CLSID_DesktopGadget 정의에서 가져 왔습니다. – tyranid

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