C#从没有定义代码的接口调用方法

时间:2016-03-21 15:42:01

标签: c# com com-interop

好吧,所以我是C#Interfaces的新手。根据我的理解,接口包含类可以实现和使用的方法原型。例如:

interface MyInterface {
    public void printhelloworld();
}

class MyExampleClass : MyInterface {
    public void exampleMethod() {
        printhelloworld();
    }

    public void printhelloworld() {
        System.Console.WriteLine("Hello, world!");
    }
}

但是,我遇到问题的界面在Shell32。更具体地说,我正在尝试拨打ParseName method of Folder,并从那里调用InvokeVerb method of FolderItem

根据我在课堂视图中看到的内容,Shell32声明了:

  • 界面,Folder
  • 另一个界面,FolderItem
  • 无法继承
  • 的班级ShellFolderItemClass

我的目标是在某些目录上调用右键单击动词。但是,从我所看到的,接口需要一个实现,这意味着我不能简单地“调用方法”。该方法未定义。

我将如何做到这一点?

1 个答案:

答案 0 :(得分:1)

COM接口的工作方式与普通的C#类型不同。将COM实例强制转换为接口会调用QueryInterface。这是CLR魔术。

这就是为什么你可以让界面强制转换工作在静态不应该工作的COM类型上。此外,强制转换可能会失败,通常不会失败。

我没有Shell COM API的经验,但理论上(MyInterface)(new MyExampleClass())可以工作,如果涉及的所有类型都是COM类型。