接口引用如下:
...............
[ComImport,
Guid("b722bccb-4e68-101b-a2bc-00aa00404770"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IOleCommandTarget
{
//IMPORTANT: The order of the methods is critical here. You
//perform early binding in most cases, so the order of the methods
//here MUST match the order of their vtable layout (which is determined
//by their layout in IDL). The interop calls key off the vtable ordering,
//not the symbolic names. Therefore, if you switched these method declarations
//and tried to call the Exec method on an IOleCommandTarget interface from your
//application, it would translate into a call to the QueryStatus method instead.
void QueryStatus(ref Guid pguidCmdGroup, UInt32 cCmds,
[MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] OLECMD[] prgCmds, ref OLECMDTEXT CmdText);
void Exec(ref Guid pguidCmdGroup, uint nCmdId, uint nCmdExecOpt, ref object pvaIn, ref object pvaOut);
}namespace WindowsApplication1
{ public class frmWebBrowser : System.Windows.Forms.Form
{

                   ..............................                   private mshtml.HTMLDocument GetDocument()
{
try
{
mshtml.HTMLDocument htm = (mshtml.HTMLDocument)_ActiveWebBrowser.Document;
return htm;
}
catch
{
throw (new Exception("Cannot retrieve the document from the WebBrowser control"));
}
}
                                  public void WebBrowserFind()
{
IOleCommandTarget cmdt;
Object o = new object();
try
{
cmdt = (IOleCommandTarget)GetDocument();//是把GetDocument()类型转接换为IOleCommandTarget接口类型吗?
cmdt.Exec(ref cmdGuid, (uint)MiscCommandTarget.Find,
(uint)SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, ref o, ref o);
}
catch(Exception e)
{
System.Windows.Forms.MessageBox.Show(e.Message);
}
}
}
}按照接口的定义:
接口可以从多个基接口继承,而类或结构可以实现多个接口。接口可以包含方法、属性、事件和索引器。接口本身不提供它所定义的成员的实现。接口只指定实现该接口的类或接口必须提供的成员。且接口不可以实类化引用接口必须先实现,但是这里并没有实现接口,而且按口里面的函数只是定义,要在类中实现才有作用,但上面那段程序可以用接口里面的函数实现一定功能呢?接口只是定义,那么在不是一个大应用程序中,不如在类里定义一个函数,而不用按口,因为接也要类也实现,还不是一样,我本接口的理解不深,最主要没有在程序时觉得它的功能,有没有那位大侠给出一个例子,体现接口的强大功能。还有,下面有对接口与组件的关系,我不懂接口在其中起的重大作用。
引用如下:
接口描述了组件对外提供的服务。在组件和组件之间、组件和客户之间都通过接口进行交互。因此组件一旦发布,它只能通过预先定义的接口来提供合理的、一致的服务。这种接口定义之间的稳定性使客户应用开发者能够构造出坚固的应用。一个组件可以实现多个组件接口,而一个特定的组件接口也可以被多个组件来实现。  组件接口必须是能够自我描述的。这意味着组件接口应该不依赖于具体的实现,将实现和接口分离彻底消除了接口的使用者和接口的实现者之间的耦合关系,增强了信息的封装程度。同时这也要求组件接口必须使用一种与组件实现无关的语言。目前组件接口的描述标准是IDL语言。  由于接口是组件之间的协议,因此组件的接口一旦被发布,组件生产者就应该尽可能地保持接口不变,任何对接口语法或语义上的改变,都有可能造成现有组件与客户之间的联系遭到破坏。  每个组件都是自主的,有其独特的功能,只能通过接口与外界通信。当一个组件需要提供新的服务时,可以通过增加新的接口来实现。不会影响原接口已存在的客户。而新的客户可以重新选择新的接口来获得服务。如果能用应用程序体现在它们的关系更好。各位大侠不妨简单说两句,发表下你们的见解。